Переписали дневной ETL с Pandas на Polars — выигрыш 6x по времени, но грабли тоже собрали

Рейтинг: 34.2% · 2 голосов
Machine learning и deep learning: обучение и дообучение моделей, датасеты, PyTorch, TensorFlow, эксперименты, метрики, MLOps и аналитика данных.
Ответить
Аватара пользователя
proxmoxaddict
Сообщения: 6
Зарегистрирован: 20 май 2026, 00:57

Переписали дневной ETL с Pandas на Polars — выигрыш 6x по времени, но грабли тоже собрали

Сообщение proxmoxaddict »

Поделюсь опытом миграции, может кому сэкономит неделю. Был дневной ETL на Pandas: тянем ~40 ГБ сырых логов (партиционированный parquet), джойним со справочниками, агрегируем, пишем витрины. Крутилось часа полтора и периодически падало по памяти на пиковых днях, приходилось дробить руками. Переписали на Polars с ленивым API (scan_parquet + lazy, без eager-загрузки), включили streaming-движок для агрегаций, которые не влезают в RAM. Итог: то же самое считается минут за 14, пик по памяти упал втрое, падений по OOM больше нет вообще. Прирост 6x по времени, и это без переезда на другое железо. Но не всё гладко, ниже про грабли, и хочу услышать, у кого как.
👍1 ❤️1 🔥2 😄 🤔
✔ Лучший ответ сформирован автоматически — fabs2002x
@Bowden, Грабли, как обещал. Первое и самое больное — таймзоны и datetime. Polars гораздо строже Pandas: где Pandas молча проглатывал смесь naive и tz-aware дат, Polars честно падает, и нам пришлось приводить всё к UTC явно на входе. Второе — экосистема: половина наших аналитиков пишет код, который ждёт на выходе pandas.DataFrame (scikit, кастомные либы), так что на границе пайплайна всё равно .t…
Перейти к ответу →
Аватара пользователя
Bowden
Сообщения: 80
Зарегистрирован: 12 май 2026, 09:21

Re: Переписали дневной ETL с Pandas на Polars — выигрыш 6x по времени, но грабли тоже собрали

Сообщение Bowden »

Грабли давай, конечно, но сразу встречный вопрос: а почему не DuckDB? У тебя задача звучит как чистый SQL-кейс — джойны, агрегации, partitioned parquet. DuckDB это всё жрёт нативно, out-of-core из коробки, и SQL читается всей командой, а не только тем, кто выучил polars-экспрешены. Мы похожий пайплайн гоняем на нём, 40 ГБ для него вообще не нагрузка. Polars шикарен, когда тебе нужны сложные оконные трансформации внутри Python, но для классического ETL DuckDB часто проще и так же быстр.
👍1 ❤️ 🔥 😄2 🤔
Аватара пользователя
fabs2002x
Сообщения: 13
Зарегистрирован: 29 май 2026, 14:23

Re: Переписали дневной ETL с Pandas на Polars — выигрыш 6x по времени, но грабли тоже собрали

Сообщение fabs2002x »

✔ Лучший ответ — сформирован автоматически
@Bowden, Грабли, как обещал. Первое и самое больное — таймзоны и datetime. Polars гораздо строже Pandas: где Pandas молча проглатывал смесь naive и tz-aware дат, Polars честно падает, и нам пришлось приводить всё к UTC явно на входе. Второе — экосистема: половина наших аналитиков пишет код, который ждёт на выходе pandas.DataFrame (scikit, кастомные либы), так что на границе пайплайна всё равно .to_pandas(), и вот тут zero-copy не всегда срабатывает, иногда ловишь лишнюю копию в памяти. Третье — ленивость коварна: .collect() в неожиданном месте материализует промежуток, который ты считал ленивым, и привет, пик по памяти вернулся. Профилируй план через explain, иначе streaming тихо отключается на неподдерживаемой операции.
👍1 ❤️ 🔥 😄1 🤔
Аватара пользователя
nixos_andy
Сообщения: 61
Зарегистрирован: 11 май 2026, 03:44

Re: Переписали дневной ETL с Pandas на Polars — выигрыш 6x по времени, но грабли тоже собрали

Сообщение nixos_andy »

Полностью узнаю себя в пункте про .collect() в неожиданном месте. Добавлю от себя: следите за версией. До Polars 1.x streaming-движок был помечен экспериментальным и реально мог тихо давать другой результат на краевых случаях с null в группировках. На 1.x стало сильно стабильнее, но всё равно — закрепите версию в проде и не прыгайте на свежак без прогона на эталонном датасете. Один раз словили расхождение в агрегации после минорного обновления, искали полдня.
👍 ❤️ 🔥2 😄1 🤔1
Аватара пользователя
depechie
Сообщения: 67
Зарегистрирован: 11 май 2026, 11:32

Re: Переписали дневной ETL с Pandas на Polars — выигрыш 6x по времени, но грабли тоже собрали

Сообщение depechie »

@fabs2002x, Не хочу быть тем самым душнилой, но: 40 ГБ в день — это размер, на котором и оптимизированный Pandas с Arrow-бэкендом (тот, что в Pandas 3.0 по умолчанию) уже не так позорно выглядит, как старый numpy-backed. Прежде чем переписывать тысячи строк на новый фреймворк, стоит хотя бы померить, сколько даёт просто включение copy-on-write и Arrow-типов на текущем коде. Иногда выигрыш миграции съедается стоимостью поддержки кода, который теперь понимает полтора человека в команде. Не агитирую против Polars, он реально быстр, просто призываю считать совокупную стоимость, а не только секунды на бенчмарке.
👍 ❤️1 🔥1 😄2 🤔
Аватара пользователя
nogo487
Сообщения: 16
Зарегистрирован: 14 май 2026, 02:16

Re: Переписали дневной ETL с Pandas на Polars — выигрыш 6x по времени, но грабли тоже собрали

Сообщение nogo487 »

Полярис у нас в проде год, отвечу скептику выше: совокупная стоимость как раз в плюсе оказалась, потому что упавший ночью пайплайн на Pandas по OOM стоил дежурному инженеру вставания в 4 утра, а это куда дороже любого рефакторинга. Стабильность по памяти из-за streaming — недооценённый аргумент, его на бенчмарках не видно, а в эксплуатации это главное. Но соглашусь, что порог входа в синтаксис реальный: новичку polars-экспрешены поначалу выносят мозг сильнее, чем привычный pandas. Документацию команде дать обязательно, иначе каждый изобретает свой стиль и ревью превращается в ад.
👍1 ❤️1 🔥1 😄1 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Машинное обучение и Data Science»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость