Это не вызвано этим парсером json. Просто попробуйте ввести 714341252076979033 в консоль fbug. Вы увидите тот же 714341252076979100.
Подробнее см. В этом блоге: http://www.exploringbinary.com/print-precision-of-floating-point-integers-varies-too
Прочтите Руководство по программированию, в нем есть раздел, посвященный этому: Понимание закрытий . Если вам действительно нужно собрать какое-либо состояние, вы можете использовать Аккумуляторы (но обратите внимание, что вы не можете получить доступ к значению из узлов-исполнителей, только его исправьте). Но сначала попробуйте без них: подумайте о доступных преобразованиях вместо мутирующего состояния.
То, как вы рассуждаете о программе, неверно. foreach
выполняется независимо от каждого исполнителя и изменяет свою собственную копию sum
. Здесь нет глобального общего состояния. Просто подсчитайте значения напрямую:
df.select("column1").distinct.count
Если вы действительно хотите обработать это вручную, вам понадобится некоторый тип reduce
:
df.select("column1").distinct.rdd.map(_ => 1L).reduce(_ + _)