Polars 2.0: потоковый движок по умолчанию ускоряет запросы в 5 раз
Pre-Release of Polars 2.0

Вышел первый релиз-кандидат Polars 2.0. Главное изменение — все запросы LazyFrame теперь по умолчанию выполняются на потоковом движке, что значительно улучшает использование памяти и производительность (ожидается ускорение до 5 раз). Также Polars становится строже: проверки типов и длин при конкатенации теперь вызывают ошибки вместо тихого приведения, а устаревшие методы и параметры удалены с понятными сообщениями об ошибках. Для перехода опубликовано полное руководство по миграции.
Мы надеемся, что этот релиз будет скучным для вас.
- benrutter
Мы не стремимся сделать большое релизное обновление Polars 2.0. На самом деле мы надеемся, что оно будет скучным для вас. Причина, по которой мы повышаем мажорную версию, в том, что мы можем избавиться от дизайнерских решений, принятых в прошлом, которые сейчас нас блокируют, и затем мы хотим изменить значения по умолчанию на более разумные настройки, которые принесут пользу более широкой аудитории.
Я знаю, что этот взгляд выставляет меня очень скучным человеком, но мне нравится видеть, как проекты серьезно относятся к semver! Повышение версий действительно должно быть об удалении устаревшего хлама, а не о блестящих новых функциях.
Я пользуюсь polars уже некоторое время, и их фокус на стабильности был большой частью того, что убедило меня совершить этот переход изначально!
- perrygeo
Для меня суперсила polars — это стабильность в продакшене.
Pandas склонен переносить все проблемы на этап выполнения, со всевозможными скрытыми эвристиками. Особенно в отношении типов столбцов и пропущенных значений. Очень трудно понять, протестировали ли вы все крайние случаи. Единственный способ протестировать свой код — бросить в него все варианты данных. Это нормально, если вы сидите за ноутбуком и у вас есть терпение проверять и «чистить» данные за него. Не очень хорошо, если вас будят в 3 часа ночи, потому что ваш конвейер данных упал, когда ожидал столбец int, а получил float.
Polars более строг по умолчанию и переносит затраты на этап планирования. Получающиеся приложения заметно более стабильны в продакшене. Вы можете тестировать код с разумной уверенностью, что он будет работать на реальных данных.
Мне не очень интересны эргономика API или синтаксис — оба нормальны. Все дело в том, как они обрабатывают вариации данных во время выполнения. Можно ли написать общий код, который не ломается на вариантах? Pandas — ни шанса. Polars — абсолютно!
Бонус: у polars есть также Rust API, и компилятор может эффективно доказать, что ваша программа обрабатывает каждый крайний случай. Обычно пишут Rust-приложения на polars, которые работают без присмотра годами.
- trombonechamp
Есть ли причина, кроме производительности, по которой maintain_order=False по умолчанию? Я спрашиваю, потому что polars используется во многих научных конвейерах анализа данных, а недетерминированное поведение — хорошо задокументированный источник ошибок в научных вычислениях (например, https://pmc.ncbi.nlm.nih.gov/articles/PMC6919963/). Новое значение по умолчанию требует, чтобы пользователи держали в голове детали реализации API, определяя, корректен ли код. Это сложно в научных вычислениях, потому что правильный ответ заранее неизвестен, поэтому ошибки могут проскочить и молча дать неверные результаты.
- bbstats
Меня ужасно раздражает, что «Use instead: .cat.to(dtype) for int → categorical, .cat.physical() for categorical → int.» не содержит необходимого примера кода!
- lmeyerov
Переход к потоковой обработке и в целом к обработке данных, не помещающихся в память, — это здорово.
Недавно мы добавили бэкенд Polars в GFQL (графовые запросы в стиле Cypher на датафреймах, без БД), как для CPU, так и для GPU, и это супер впечатляет. Заметные улучшения по сравнению с pandas/cudf, и это позволило GFQL обойти популярные системы в большем количестве категорий, таких как низкая задержка, а не только большие наборы данных: https://www.graphistry.com/blog/cypher-on-polars-cpu-gpu-gra...
- bobson_dugnutt5
Я люблю polars. Много занимался евангелизацией на работе, чтобы люди отказались от pandas в пользу него.
- Kydlaw
Рад видеть активность вокруг Polars. Это моя основная библиотека для обработки данных из-за улучшенной эргономики по сравнению с Pandas и SQL.
Но в последнее время они были довольно тихими, и я начал все больше присматриваться к DuckDB... пока не произошло недавнее приобретение DuckLab компанией AWS.
- arn3n
Решение использовать потоковый движок по умолчанию действительно интересно. Моя интуиция подсказывает, что это будет медленнее, чем другие операции с датафреймами, которые лучше параллелизуются при пакетной обработке, потому что потоковые движки обрабатывают строки последовательно. Моя интуиция неверна, или я переоцениваю степень автоматического параллелизма в polars?