【问题标题】:Spark Async interface for Fold, Reduce, Aggregate?用于折叠、减少、聚合的 Spark 异步接口?
【发布时间】:2015-06-05 00:55:18
【问题描述】:

在官方 Spark RDD API 中:

https://spark.apache.org/docs/2.1.0/api/java/org/apache/spark/rdd/AsyncRDDActions.html

count、collect、foreach 和 take 都有返回 Future 的异步变体。

为什么 fold、reduce 和 aggregate 没有这个 async/future 接口?这似乎很重要。

【问题讨论】:

  • 和 saveAsObjectFile
  • 同意。这是 Spark API 中令人不安的不一致。如果有的话,为fold 提供异步选项会更有意义,因为它更通用,您可以使用它来创建异步reducecount

标签: asynchronous apache-spark future


【解决方案1】:

!!!已编辑

@Jan Van den bosch 是对的(参见下面的 cmets)。这个问题根本不是关于转换的。万一其他人被愚弄了,我在下面留下了我被误导的答案。

!!!原始答案(不正确)

TL;DR: 火花“动作”与“转换”之间的区别:https://spark.apache.org/docs/2.2.0/rdd-programming-guide.html#rdd-operations


请注意,您使用异步选项列出的所有内容都是 spark "actions",这意味着它们将立即开始处理数据并尝试同步返回。如果有很多数据可能需要很长时间,所以有一个异步选项很好。

同时,您列出的没有异步选项的操作是 spark "transformations",它们是延迟评估的,这意味着它会立即创建一个计划来完成这项工作,但它实际上不会处理任何数据,直到您稍后应用“操作”以返回结果。

同时,您是否有特定代码或您正在尝试解决的问题?

【讨论】:

  • 这不是关于操作与转换,而是关于同步 (.collect()) 与异步 (.collectAsync()) 获取结果。
  • @Jan Van den bosh,实际上,因为它们是转换,它们根本不运行任何东西(同步或异步)。无论如何,您都必须执行操作才能获得转换的结果。你是说你可以做rdd.fold(...).collect,但由于某种原因rdd.fold(...).collectAsync 不起作用?这让我很惊讶,因为foldcollect(Aysnc) 应该是独立的。
  • 不,我不是这么说的。这个问题根本不是关于转换的。这是关于拥有 collect + collectAsynccount + countAsync 的方法,但不是 reduceAsyncfoldAsync
  • 对不起,你是对的,@Jan Van den bosch。我很少使用 spark 的 fold 和 reduce 方法,所以我实际上是在考虑何时在 spark map 或某种分组中使用 scala 的 fold 或 reduce。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 2018-12-07
  • 2013-12-27
  • 2012-02-21
  • 1970-01-01
  • 2011-12-05
相关资源
最近更新 更多