
Polars 2.0: стрімінговий рушій стає типовим режимом
Polars випустив перший кандидат версії 2.0: усі запити LazyFrame переходять на стрімінговий рушій, обробка типів стає суворішою, а видалені API повідомляють про заміну.
Polars опублікував перший кандидат на випуск версії 2.0; фінальний реліз очікується протягом найближчих тижнів. У блозі проєкту провідний розробник Рітчі Вінк наголошує, що зміна мажорної версії пов'язана не з функціями, а з відмовою від давніх проєктних рішень і переходом до розумніших типових налаштувань.
Стрімінг стає типовим режимом
Найбільша зміна — усі запити LazyFrame тепер виконуються на стрімінговому рушії. Виклик collect() дає значне скорочення споживання пам'яті та кращу продуктивність на більшості запитів; за оцінками проєкту, в сукупності стрімінговий рушій легко виявляється у 5 разів швидшим.
Саме через це й знадобилася нова мажорна версія: стрімінговий рушій не гарантує порядок рядків для таких операцій, як join, group_by та unpivot. Код, що залежить від спостережуваного порядку, має явно ввімкнути його параметром maintain_order=True, а користувачі, яким потрібен старий рушій у пам'яті як типовий, можуть задати affinity через pl.Config.set_engine_affinity.
Суворіше і з зрозумілішими помилками
Polars 2.0 також робить суворішою поведінку, яка раніше мовчки давала збої. Вираз is_in для різних типів раніше зводив обидві сторони до спільного типу навіть тоді, коли перетворення втрачало дані — у блозі наведено порівняння ідентифікатора користувача понад 2^53, де округлення давало хибний збіг; тепер такий випадок спричиняє помилку. Горизонтальний concat перевіряє довжини, а не заповнює null-ами, і стара поведінка лишилася тільки як явна опція "horizontal_extend". Кілька неоднозначних cast видалено на користь спеціальних методів, зокрема .cat.to() і .str.to_date().
Для видалених API додано два типізовані винятки — AttributeRemovedError та ArgumentRemovedError, — чиї повідомлення вказують на заміну: melt став unpivot, а join_nulls перейменовано на nulls_equal. Автор також зазначає, що рання перевірка схеми через collect_schema() корисна для AI-агентів, які можуть перевірити структуру запиту до обробки даних.
Що далі
За словами Вінка, 2.x піде далеко за межі 1.x: підтримка обробки поза межами пам'яті для стрімінгового рушія, новий дизайн IO-плагінів, робота над, як очікує команда, найшвидшим зчитувачем S3, ширша підтримка SQL, планувальник на основі вартості, перевпорядкування join та видалення mmap, щоб зробити конвеєри повністю асинхронними. Повний посібник з міграції вже доступний, а кандидат встановлюється командою pip install polars==2.0rc1.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.