Apache Spark - итераторы и потребление памяти - PullRequest
1 голос
/ 26 апреля 2019

Я новичок в spark и у меня вопрос по поводу использования искровой памяти с итераторами.

При использовании Foreach () или MapPartitions () наборов данных (или даже прямого вызова функции iterator () в RDD) требуется ли спарку сначала загрузить весь раздел в ОЗУ (при условии, что раздел находится на диске) или данные могут загружаться лениво, пока мы продолжаем итерацию (это означает, что spark может загрузить только часть задачи выполнения данных раздела и сохранить на диск промежуточный результат)

1 Ответ

0 голосов
/ 04 мая 2019

Первое различие между этими двумя заключается в том, что forEach() - это действие, когда mapPartition() - это преобразование.Было бы более целесообразно сравнить forEach с forEachPartition, поскольку они оба являются действиями и работают с окончательно накопленными данными в драйвере.Обратитесь здесь для подробного обсуждения этих двух вопросов.Что касается потребления памяти, это действительно зависит от того, сколько данных вы возвращаете в драйвер.В качестве эмпирического правила не забудьте вернуть результаты в драйвере, используя такие методы, как limit(), take(), first() и т. Д., И избегайте использования collect(), если вы не уверены, что данные могут поместиться в памяти драйвера.

mapPartition можно сравнить с функциями map или flatMap, и они будут изменять данные СДР, применяя какое-то преобразование.mapPartition более эффективен, поскольку он будет выполнять данную функцию меньше раз, когда map будет выполнять то же самое для каждого элемента в наборе данных.См. здесь для получения более подробной информации об этих двух.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...