我对在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
尚未被检查点。
因此该分区是从头开始重新计算的。因此,我希望对这些记录的累加器进行两次更新。
这种情况可能吗?