【问题标题】:Pyspark with ElasticsearchPyspark 与 Elasticsearch
【发布时间】:2015-10-18 04:25:56
【问题描述】:

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

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

【问题讨论】:

  • Spark 中的所有转换都是惰性的,因为它们不会立即计算结果。相反,他们只记得应用于某些基础数据集(例如文件)的转换。仅当操作需要将结果返回给驱动程序时才计算转换。这种设计使 Spark 能够更高效地运行——例如,我们可以意识到通过 map 创建的数据集将在 reduce 中使用,并且只将 reduce 的结果返回给驱动程序,而不是更大的映射数据集。没有其他办法。
  • 如果需要,您可以在缓存后执行计数,但我看不出这样做的目的。

标签: elasticsearch apache-spark pyspark


【解决方案1】:

就像我在评论区说的,

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

别无他法。

为什么懒惰?

函数式编程的惰性求值好处:

  • 通过避免计算复合表达式时的不必要计算和错误条件来提高性能
  • 构建潜在无限数据结构的能力
  • 能够将控制结构定义为抽象而不是原语

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

尽管如此,如果您想在每个 RDD 定义后计算您的 RDD,您可以在缓存后执行 count 操作,但我认为这样做没有目的。您最终会在需要时获得 RDD。

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 2020-07-28
    • 2017-10-04
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    相关资源
    最近更新 更多