Как понять этот кусок кода в Spark - PullRequest
0 голосов
/ 25 октября 2019

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

data_reduce = sc.parallelize([1.0, 2, .5, .1, 5, .2], 1)
data_reduce.reduce(lambda x, y: x / y)

1 Ответ

1 голос
/ 25 октября 2019

в первой строке вашего кода мы создаем кадр данных.

data_reduce = sc.parallelize([1.0, 2, .5, .1, 5, .2], 1) # 1 partition

в приведенном выше фрагменте кода

SC: sc - переменная контекста spark, которую мы используем здесь. Когда вы запускаете оболочку spark, оболочка spark автоматически предоставляет вам переменную sc. но в случае других неискровых приложений вам придется создать другую переменную sc. sc - это точка входа в вашу программу. SparkContext создан, вы можете использовать его для создания RDD, аккумуляторов и широковещательных переменных, доступа к сервисам Spark и запуска заданий

Параллелизация: существует несколько способов создания rdd в искре. Пример загрузки файла, загрузки данных из таблицы аналогично, используя функции распараллеливания, вы можете создать фрейм данных, передавая коллекции, такие как массивы и список, см. Пример ниже

val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)

data_reduce: это ваш RDD, созданный один раз, распределенный набор данных (data_reduce) может работать параллельно.

вторая строка кода

data_reduce.reduce(lambda x, y: x / y)

Здесь мы вызываем функцию сокращения в вашем СДР. В вашем примере мы делаем кумулятивную сумму всех элементов вашего RDD. Я надеюсь, что вы знакомы с концепциями разделов в RDD. Тогда мы знаем, что наши данные распределены по разным узлам в виде разделов, в вашем случае

[1.0, 2, .5, .1, 5, .2]

скажем, если они распределены по двум разделам

, поэтому они будут выглядеть как

раздел 1: [1.0, 2, .5] раздел 2: [.1, 5, .2]

Теперь здесь будет вызываться функция сокращения для каждого раздела

Здесь метод сокращенияпринимает function (accum, n) => (accum + n). Эта функция инициализирует переменную аккумулятора (накопителя) с целочисленным значением по умолчанию 0, делит элемент каждый раз, когда вызывается метод Reduce, и возвращает окончательное значение, когда обрабатываются все элементы СДР X. Он возвращает окончательное значение, а не другое СДР.

хорошо, поэтому давайте разберемся, как здесь работает Reduce

  • шаг 1: [1.0, 2, .5, .1, 5, .2]. Уменьшить (лямбда х, у: х / у) здесь х = 1,0, у = 2, таким образом, х / у = 0,5

  • шаг 2: теперь 0,5 будетбудет храниться в x, а y будет новым элементом из
    rdd, поэтому x = 0.5 и y = 0.5, таким образом, x / y = 1

  • шаг 3: аналогично теперь x = 1 иу = 0,1, поэтому х / у = 10

  • шаг 4: х = 10, у = 5, так х / у = 2

  • шаг 5: х= 2, y = 0,2, так что x / y = 10

Итак, 10 - ваш окончательный ответ, надеюсь, я вас сейчас очищу:)

Вы можете прочитать более подробную информацию о функции сниженияс здесь

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