Polars 2.0: потоковый движок по умолчанию и обещанное «скучное» обновление

· Программы
Разработчики Polars выпустили первый релиз-кандидат версии 2.0. Главное изменение — переход на потоковый движок по умолчанию, который обещает кратный рост производительности.

cover.svg

Команда Polars, библиотеки для работы с данными на Rust и Python, представила первый релиз-кандидат версии 2.0. Финальный релиз ожидается в ближайшие недели. Автор анонса Ритчи Винк подчёркивает: цель обновления — не добавить громких функций, а, напротив, сделать переход максимально «скучным». Смена мажорной версии понадобилась, чтобы избавиться от старых архитектурных решений и поменять настройки по умолчанию на более разумные.

Потоковый движок по умолчанию

Главное изменение — вызов collect у LazyFrame теперь по умолчанию выполняется на потоковом (streaming) движке. Разработчики обещают заметное снижение потребления памяти и ускорение большинства запросов — в среднем примерно в пять раз.

У нового поведения есть нюанс, ради которого и пришлось поднимать мажорную версию: потоковый движок не гарантирует порядок строк для операций вроде join, group_by и unpivot. Если порядок важен, его нужно запрашивать явно через maintain_order=True. Тем, кто хочет сохранить прежний «in-memory» движок, доступна настройка привязки: pl.Config.set_engine_affinity("in-memory") или параметр engine="in-memory" для отдельного запроса.

Строгость вместо тихих ошибок

Второе направление — Polars стал строже и старается падать как можно раньше, а не через двадцать минут работы конвейера. Авторы отмечают, что это особенно ценно в эпоху разработки с участием ИИ-агентов: те могут заранее проверить структуру запроса через collect_schema(), не материализуя данные, и быстрее получать обратную связь.

Примеры новой строгости говорят сами за себя. Операция is_in больше не приводит типы к общему с потерями: раньше сравнение целочисленного идентификатора с числом в формате float могло молча округлить значение выше 2^53 и дать ложное совпадение. Горизонтальная конкатенация теперь проверяет длину и не дополняет данные null втихую — если один из источников недосчитался строк (например, из-за сбоя вышестоящей задачи), будет вызвана ShapeError. Для дополнения нужно явно указать how="horizontal_extend". Убрали и множество неоднозначных приведений типов: строку в дату теперь парсят через .str.to_date(), а не через cast.

Чтобы переход не был болезненным, добавили осмысленные ошибки — новые исключения AttributeRemovedError и ArgumentRemovedError подсказывают, чем заменить устаревший метод или параметр.

Что дальше

Винк уверяет, что ветка 2.x будет значительно лучше 1.x, но новые функции не привязываются к смене мажорной версии — их выкатывают по мере готовности. В работе, среди прочего, полноценная поддержка out-of-core для потокового движка, новый дизайн IO-плагинов, «самый быстрый» ридер для S3, расширение поддержки SQL, планировщик на основе стоимости и отказ от mmap ради полностью асинхронных конвейеров.

Попробовать кандидат можно командой pip install polars==2.0rc1.


Источник: Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.