⭐️ Spark нашёл тормоза не в UDF, а в конвертации Arrow
После перевода обычных Python UDF на Arrow-сериализацию по умолчанию Spark столкнулся с просадкой производительности на массивах и других вложенных типах.
Причиной оказался PyArrow.to_pylist(): каждый элемент превращался в C++ Scalar, затем в Python-обёртку. Профилирование показало, что около 20% времени уходило на сборщик мусора, 25% — на создание Scalar и только 7% — на формирование самих значений.
В Arrow 25.0.1 добавили преобразование без промежуточных Scalar. В тестах list<string> ускорился в 4,2 раза, вложенные списки — в 5,2 раза, структуры — в 13 раз без изменения результата.
Для инженеров вывод простой: если Python UDF с массивами внезапно тормозит после включения Arrow, узкое место может находиться не в функции, а в версии PyArrow.
Пруфы:
🔘релиз Apache Arrow 25.0.1 — 10 августа 2026 года
🔘изменение с тестами
#apachearrow #apachespark #pyarrow #pythonudf #serialization #performance #dataengineering
@data_engi
Post #1313
147