Apache Spark: reduceByKey不会执行两次DAG

3
我有一个简单、可能有点奇怪的问题:对于下面的代码,DAG被执行了两次,这是正常的,因为我调用了两次action。
val input = sc.parallelize(List(1,2,3,4))
val result = input.map(x => {
  println("!!! Input Map !!!")
  errorLines.add(1)
  (x,1)
})
//.reduceByKey(_+_)
println(result.count())
println(result.collect())

如果我取消注释reduceByKey行 - DAG将只执行一次,尽管reduceByKey是转换操作,并且我调用了两次动作。
这是否意味着Spark并不总是重新计算DAG?
1个回答

4

Spark中的文件混洗作为隐式缓存,因此每当您的管道包含混洗阶段(例如*ByKey),并且涉及节点故障时,Spark将仅重复最后一个阶段。

话虽如此,在转换中使用stdout或累加器errorLines都不可靠。在正常执行期间,前者会丢失,而后者不能提供精确一次性保证。

Apache Spark Web UI中“跳过阶段”是什么意思?相关


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接