我在Elasticsearch中使用Pyspark。我注意到,当您创建RDD时,不会在任何收集,计数或任何其他“最终”操作之前执行该RDD。
当我将转换后的RDD的结果用于其他事情时,是否还有执行和缓存转换后的RDD的方法。
就像我在评论部分所说的那样,
Spark中的所有转换都是 惰性的 ,因为它们不会立即计算出结果。相反,他们只记得应用于某些基本数据集(例如文件)的转换。仅当操作要求将结果返回给驱动程序时才计算转换。这种设计使Spark可以更高效地运行- 例如,我们可以认识到通过map创建的数据集将用于reduce中,并且仅将reduce的结果返回给驱动程序,而不是将较大的maped数据集返回给驱动程序。
没有其他办法了。
为什么懒呢?
函数式编程的惰性评估优点:
注意: 大多数新的函数式编程语言都是惰性的(例如Haskell,Scala)。即使以为您使用的是Python,Spark还是用Scala编写的。
但是,如果要在每次RDD定义后计算RDD,则可以count根据需要在缓存后执行操作,但这样做没有目的。您最终将在需要时获得RDD。
count