RDD中使用的AccumulatorV2

时间:2018-11-11 07:55:59

标签: scala apache-spark

我对在RDD中使用蓄电池以及如何可靠地使用蓄电池有疑问。

因此,假设我们有以下累加器:

val sc: SparkContext = //...
val accum = sc.longAccumulator("Accumulator name")
val rdd = //some rdd
rdd foreach { _ => 
    accum.add(1L)
}

据我所知,RDD所代表的数据正在被分区分割,并且我们每次执行某些操作时都会尝试

computeOrReadCheckpoint(split: Partition, context: TaskContext)

每个分区。

因此,如果我们已经完全计算了一个分区,我们将在驱动程序端更新累加器值。但是之后,包含该分区的执行程序崩溃,但是RDD尚未被检查点。

因此该分区是从头开始重新计算的。因此,我希望对这些记录的累加器进行两次更新。

这种情况可能吗?

0 个答案:

没有答案