【发布时间】:2016-01-14 17:31:51
【问题描述】:
我正在使用 Apache Spark 处理大量数据。我需要在同一个 RDD 上执行许多 Spark 操作。我的代码如下所示:
val rdd = /* Get the rdd using the SparkContext */
val map1 = rdd.map(/* Some transformation */)
val map2 = map1.map(/* Some other transformation */)
map2.count
val map3 = map2.map(/* More transformation */)
map3.count
问题在于调用第二个动作map3.count 会强制重新执行转换rdd.map 和map1.map。
这到底是怎么回事?我认为 Spark 构建的 DAG 是造成这种行为的原因。
【问题讨论】:
-
您是否有一个最小的工作示例来重现该行为?我在
map中使用println尝试了一些明显的操作来显示正在执行的操作,但是当我在第二个上调用collect时,我只得到第二个,而不是第一个。 -
我已经更正了我的问题,这不是那么准确。明天我将能够给出一个有效的例子。感谢您的帮助。
标签: scala apache-spark rdd