一尘不染

Pyspark与Elasticsearch

elasticsearch

我在Elasticsearch中使用Pyspark。我注意到,当您创建RDD时,不会在任何收集,计数或任何其他“最终”操作之前执行该RDD。

当我将转换后的RDD的结果用于其他事情时,是否还有执行和缓存转换后的RDD的方法。


阅读 255

收藏
2020-06-22

共1个答案

一尘不染

就像我在评论部分所说的那样,

Spark中的所有转换都是 惰性的
,因为它们不会立即计算出结果。相反,他们只记得应用于某些基本数据集(例如文件)的转换。仅当操作要求将结果返回给驱动程序时才计算转换。这种设计使Spark可以更高效地运行-
例如,我们可以认识到通过map创建的数据集将用于reduce中,并且仅将reduce的结果返回给驱动程序,而不是将较大的maped数据集返回给驱动程序。

没有其他办法了。

为什么懒呢?

函数式编程的惰性评估优点:

  • 通过避免不必要的计算以及评估复合表达式时出现的错误情况来提高性能
  • 构造潜在的无限数据结构的能力
  • 将控制结构定义为抽象而不是基元的能力

注意: 大多数新的函数式编程语言都是惰性的(例如Haskell,Scala)。即使以为您使用的是Python,Spark还是用Scala编写的。

但是,如果要在每次RDD定义后计算RDD,则可以count根据需要在缓存后执行操作,但这样做没有目的。您最终将在需要时获得RDD。

2020-06-22