То, как вы рассуждаете о программе, неверно. foreach
выполняется независимо от каждого исполнителя и изменяет свою собственную копию sum
. Здесь нет глобального общего состояния. Просто подсчитайте значения напрямую:
df.select("column1").distinct.count
Если вы действительно хотите обработать это вручную, вам понадобится некоторый тип reduce
:
df.select("column1").distinct.rdd.map(_ => 1L).reduce(_ + _)