Apache Spark:Dag 不会针对 reduceByKey 执行两次

Apache Spark: Dag is not executed twice for reduceByKey

有一个简单但可能很奇怪的问题:对于以下代码,DAG 执行了两次,这是预期的,因为我调用了两次操作:

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?

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

据说在转换中既不使用标准输出,也不使用累加器 errorLines 是可靠的。正常执行时,前者会丢失,后者不提供exactly once保证。

相关