Аккумулятор V2 используется в СДР - PullRequest
0 голосов
/ 11 ноября 2018

У меня вопрос об использовании аккумуляторов в СДР и о том, как их надежно использовать.

Итак, представьте, что у нас есть следующий аккумулятор:

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 еще не был проверен.

Таким образом, раздел пересчитывается с нуля. Поэтому я ожидаю, что аккумулятор обновляется дважды для этих записей.

Возможен ли такой сценарий?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...