Выбор ответа Middle Spark обновлено

Python UDF против встроенных функций

Вопрос

Почему Python UDF в PySpark работает заметно медленнее встроенных функций вроде F.upper и F.when?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Данные сериализуются из JVM в Python-процесс и обратно, а оптимизатор не видит, что внутри UDF. Встроенные функции исполняются в JVM в сгенерированном коде и понятны Catalyst.

Варианты ответа

  1. Python UDF выполняется только на driver, поэтому все строки сначала стягиваются на один узел кластера
  2. Python UDF запускает отдельный Spark-кластер с Python-воркерами для каждого вызова
  3. Встроенные функции написаны на C и выполняются на GPU, а UDF только на CPU
  4. Данные сериализуются из JVM в Python-процесс и обратно, а оптимизатор не видит, что внутри UDFправильный ответ

Разбор

Встроенные функции исполняются в JVM в сгенерированном коде и понятны Catalyst. Python UDF требует обмена данными с Python-воркером и является чёрным ящиком для оптимизатора (фильтры нельзя протолкнуть сквозь него). Pandas UDF на Arrow быстрее обычных, но встроенные функции всё равно предпочтительнее. UDF выполняются на executors. Отдельного кластера нет. GPU тут ни при чём.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.