Внутренние элементы восстановительной функции в искровой оболочке - PullRequest
0 голосов
/ 21 апреля 2019

Входной файл содержит 20 строк.Я пытаюсь подсчитать общее количество записей, используя функцию Reduce.Может кто-нибудь объяснить, почему есть разница в результатах?Потому что здесь значение y не что иное, как 1. 1. 1001 *

Количество разделов по умолчанию: 4

scala> rdd = sc.textFile("D:\LearningPythonTomaszDenny\Codebase\\wholeTextFiles\\names1.txt")
scala> rdd.map(x=>1).reduce((acc,y) => acc+1)
res17: Int = 8

scala> rdd.map(x=>1).reduce((acc,y) => acc+y)
res18: Int = 20

1 Ответ

0 голосов
/ 21 апреля 2019

Потому что здесь значение у не что иное, как 1. 1. 1002 *

Это просто неправда. reduce состоит из трех этапов (не в строгом искровом значении этого слова):

  • Распределенное сокращение по каждому разделу.
  • Сбор частичных результатов для драйвера (синхронный или асинхронный в зависимости от серверной части).
  • Сокращение локального драйвера.

В вашем случае результаты первого и второго этапа будут одинаковыми, но первый подход просто проигнорирует частичные результаты. Другими словами, независимо от того, каков был результат для раздела, он всегда будет добавлять только 1.

Такой подход будет работать только с непараллельными, непоследовательными reduce реализациями.

...