Объяснение комбайна Apache SparkByKey



В этом блоге Spark Hadoop рассказывается все, что вам нужно знать об Apache Spark combByKey. Найдите средний балл на одного студента с помощью метода combByKey.

Предоставлено Притхвираджем Босом

Spark - это молниеносная платформа кластерных вычислений, предназначенная для быстрых вычислений и удовлетворения спроса на профессионалов с сегодня на рынке очень много.Вот мощный API в Spark, который combByKey .





Масштаб API: org.apache.spark.PairRDDFunctions.combineByKey .

Python API: pyspark.RDD.combineByKey .



API выполняет три функции (как лямбда-выражения в Python или анонимные функции в Лестница ), а именно

  1. Создать функцию объединения: x
  2. Функция значения слияния: y
  3. Функция объединителей слияния: z

и формат API combByKey (x, y, z) .

Давайте посмотрим на пример (на Scala). Полный исходный код Scala можно найти Вот .



Наша цель - найти средний балл на студента.

Вот класс-заполнитель ScoreDetail сохранение имени ученика вместе с оценкой предмета.

Scoredetail-spark-combinebykey

Некоторые тестовые данные генерируются и преобразуются в значения пары ключей, где key = Имя ученика и значение = ScoreDetail пример.

Затем мы создаем парный RDD, как показано во фрагменте кода ниже. Просто для экспериментов я создал хеш-разделитель размера 3, поэтому три раздела будут содержать 2, 2 и 4 пары значений ключа соответственно. Это выделено в разделе, где мы исследуем каждый раздел.

Теперь мы можем изучить каждый раздел. В первой строке печатается длина каждого раздела (количество пар значений ключа на раздел), а во второй строке печатается содержимое каждого раздела.

что такое динамический массив

А вот и финальная часть, где мы вычисляем средний балл для каждого ученика после объединения баллов по разделам.

Приведенный выше код выглядит следующим образом ...
Сначала нам нужно создать функцию объединения, которая по сути является кортежем = (значение, 1) для каждого ключа, встречающегося в каждом разделе. После этого этапа вывод для каждого (ключа, значения) в разделе будет (ключ, (значение, 1)).

Затем на следующей итерации функции объединения для каждого раздела объединяются с использованием функции объединения значений для каждого ключа. После этой фазы вывод каждого (key, (value, 1)) равен (key, (total, count)) в каждом разделе.

Наконец, функция объединения слияния объединяет все значения в разделах исполнителей и отправляет данные обратно драйверу. После этого этапа вывод каждого (ключа, (всего, счет)) на раздел
(ключ, (totalAcrossAllPartitions, countAcrossAllPartitions)).

Карта преобразует
(ключ, кортеж) = (ключ, (totalAcrossAllPartitions, countAcrossAllPartitions))
для вычисления среднего значения для каждого ключа как (ключ, кортеж._1 / кортеж._2).

В последней строке печатаются средние оценки всех учеников со стороны водителя.

Есть вопрос к нам? Упомяните их в разделе комментариев, и мы свяжемся с вами.

Похожие сообщения:

Демистификация разбиения на разделы в Spark