Apache Spark: является ли функция show () дорогой и небезопасной операцией? - PullRequest
0 голосов
/ 03 декабря 2018

В Apache Spark я знаю, что когда вы выполняете действия с данными, которые заканчиваются сбором результата на стороне драйвера, например применение collect() к данным, является небезопасной операцией, которая может привести к выходуОшибка памяти, если собранный размер больше, чем тот, который драйвер может разместить в своей памяти.

Это функция show(), которая применяется к кадрам данных, функция, которая может привести к OOM по той же причинеили я могу безопасно использовать функцию show() (возможно, по причинам отладки)?

1 Ответ

0 голосов
/ 03 декабря 2018

show так же безопасно, как и план выполнения оцениваемого Dataset.Если Dataset содержит широкие преобразования (не транслируемые объединения, агрегации, перераспределения, приложения оконных функций) или ресурсоемкие узкие преобразования (дорогие вызовы UDF, "строго" типизированные преобразования с широкой схемой), вызов show может вызвать сбой исполнителя.

В отличие от collect он будет извлекать только небольшое подмножество данных (по умолчанию 20 записей).Поэтому, исключая режим local, маловероятно, что он когда-либо вызовет сбой драйвера.

Даже если ничего из вышеперечисленного не соответствует действительности, все же возможно, что show оценит все записи.Это может произойти, если конвейер содержит строго ограничивающие выборки (фильтр), которые приводят к наличию резервных ведущих разделов.

Всего show, так же, как аналогичные операции с ограничениями, такие как take (с небольшим * 1018).*) настолько безопасны, насколько вы можете получить, но не можете гарантировать успешное выполнение.

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