Нужны ли нам все данные в памяти для запуска группы на Spark? - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь запустить группу для работы с огромными данными (около 50 ТБ) примерно так:

df_grouped = df.groupby(df['col1'], df['col2']).sum('col3')

Я использую API DataFrame в Pyspark и запускаю его в EMR с 12 r5.4 большая машина. Работа занимает много времени для обработки и в конечном итоге убивается с помощью OOM.

Мой вопрос: есть ли рекомендации по работе с группой при работе со Spark? Нужны ли нам все данные, чтобы поместиться в памяти при запуске этого?

1 Ответ

0 голосов
/ 11 ноября 2019

Операция groupBy неэффективна для таких больших наборов данных. OOM в groupBy указывает, что может быть асимметрия данных, и это потому, что реализация groupBy считывает все данные в разделе в памяти. Вы можете посмотреть на реализацию здесь https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala#L731

...