Реализующая группа с помощью карты уменьшить
Я знаю, что в spark есть групповые реализации, но я пытаюсь понять, как они работают. Я посмотрел на исходный код.
Я не совсем понимаю, отображает ли он только ключи или выполняет операцию сокращения.
Как бы вы внедрили группу, используя карту / уменьшить?
1 ответ
Вопрос немного запутанный. Но вот удар по твоему намерению.
любой aggregate
функция требует reduce
этап. groupBy
такая агрегатная функция. по факту groupBy
в основном самое дорогое семейство агрегатных функций.
AFA код: здесь это ясно показывает:
groupByKey(new HashPartitioner(numPartitions))
Обратите внимание, что HashPartitioner
всегда выполняет shuffle
: так что вы получаете полный reducer-side
(в карте / уменьшить жаргон) операция.
Обновление ОП попросил более подробную информацию о том, как reduce
работает.
Аналогично Map-Reduce reduce
объединяет результаты из map
этап в соответствии с настроенным Partitioner
- который оценивает ключ каждой записи и распределяет по соответствующему разделу в соответствии с ключом. Это shuffle
фаза.
Тогда reducer
логично было бы применить указанное aggregate
операция - и потенциально дополнительная having
(т.е. фильтры на основе совокупных условий) и sorting
(если бы они были local
не "тотальный" порядок)