Паркет написать OutOfMemoryException на свечу - PullRequest
0 голосов
/ 17 мая 2018

У меня около 8 миллионов строк данных и около 500 столбцов. Когда я пытаюсь записать его с помощью spark в виде одного файла coalesce(1), происходит сбой с OutOfMemoryException.

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

Мой исполнитель имеет 16 ГБ памяти и не может быть увеличен в дальнейшем. Данные содержат много строк.

Поэтому меня интересуют некоторые настройки, в которых я могу настроить процесс написания больших файлов паркета для широких столов.

Я знаю, что могу включить / отключить словарь, увеличить / уменьшить размер блока и страницы.

Но что будет хорошей конфигурацией для моих нужд?

1 Ответ

0 голосов
/ 17 мая 2018

Я не думаю, что Parquet действительно способствует неудаче, и настройка его конфигурации, вероятно, не поможет.

coalesce(1) - это радикальная операция, которая затрагивает весь исходящий код. В результате вся обработка выполняется на одном узле, и, по вашим собственным словам, ваши ресурсы уже очень ограничены.

Вы не предоставили никакой информации об остальной части конвейера, но если вы хотите остаться со Spark, ваша лучшая надежда - заменить coalesce на repartition. Если OOM возникает в одной из предыдущих операций, это может помочь.

...