в первой строке вашего кода мы создаем кадр данных.
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 - ваш окончательный ответ, надеюсь, я вас сейчас очищу:)
Вы можете прочитать более подробную информацию о функции сниженияс здесь