阿帕奇星火:达格没有为reduceByKey
问题描述:
有一个简单的,也许怪异问题执行两次:以下代码DAG执行两次预计,因为我打电话的动作两次:阿帕奇星火:达格没有为reduceByKey
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
是一个)在转换是可靠的。在正常执行期间,前者会丢失,而后者不会提供一次保证。