PySpark не может пролить на запись DataFrame - PullRequest
0 голосов
/ 22 февраля 2020

Я обрабатываю набор данных Large-I sh, используя PySpark 2.4.4, который поставляется со встроенным oop. Набор данных разбит на несколько сжатых CSV-файлов, и я пытаюсь сообщить совокупное количество различных столбцов, используя DataFrames PySpark. PySpark прекрасно обрабатывает все, пока я не прошу его записать DataFrame на диск, используя

df.write.csv("out.csv")

, что приводит к следующему предупреждению, затопляющему терминал

WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.

Я попытался увеличить размер память исполнителя с использованием свойства spark.executor.memory; однако ошибка сохранилась. Я не знаю, можно ли игнорировать это предупреждение или мне нужно что-то изменить, прежде чем доверять результатам отчетов.

Здесь есть два ответа здесь на аналогичный вопрос, но меня не устраивает их глубина. Ответ Fredz0r просто ссылается на другой ответ , объясняющий разницу между разливом и перемешиванием, но, похоже, не относится к части ...Will not spill... сообщения. Оставшийся ответ сформулирован так, как будто это серьезное предупреждение, но не дает подсказок, как его решить.

1 Ответ

0 голосов
/ 24 февраля 2020

Я действительно думаю, что ответы, на которые вы указываете, уже охватывают почти все.

Вот некоторые дополнительные советы, которые я могу придумать, учитывая, что вы упомянули, что вы делаете какую-то группировку:

  • Возможно, у вас есть некоторые искажения данных, которые вызывают один (или некоторые) разделов должны быть очень большими, и, следовательно, исполнителям, которые содержат эти разделы, нужно больше памяти, чем вы уже выделили

  • Если вы записываете на локальный диск драйвера вместо В некоторых распределенных файловых системах (например, HDFS) вы будете собирать все результаты для драйвера и, следовательно, вам нужно будет увеличить память драйвера вместо памяти исполнителей.

...