Apache Spark:对于reduceByKey,Dag没有执行两次

时间:2017-07-03 14:49:39

标签: apache-spark rdd directed-acyclic-graphs

有一个简单的,可能是奇怪的问题:对于以下代码,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?

1 个答案:

答案 0 :(得分:4)

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

据说既不使用stdout,也不使用累加器errorLines是一个转换是可靠的。在正常执行期间,前者将丢失,而后者不会提供一次保证。

What does "Stage Skipped" mean in Apache Spark web UI?

相关