+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Polars 2.0: защо джойновете вече не запазват реда на редовете си

Polars 2.0 изпълнява collect по подразбиране на стрийминг енджин.

Polars 2.0 изпълнява collect по подразбиране на стрийминг енджин. За join, group_by и unpivot, версията вече не гарантира реда на входните редове, освен ако изрично не зададете maintain_order или sort. В нашето изпълнение на polars 2.0.0, вътрешен join от 2 000 000 реда върна редове извън входния ред по подразбиране и запази реда със зададен maintain_order. Версията също така включва изхвърляне извън паметта (out-of-core spilling) и прави твърденията за бенчмарка собствени на доставчика.

Прочетете писменото издание (английски) ↗

Какво обхваща този видеоклип

  • Извикването на collect() при мързелива заявка вече използва стрийминг енджина по подразбиране, което не гарантира реда на редовете за join, group_by и unpivot.
  • Ръководството за миграция казва, че редът вече не е редът преди 2.0 и не е гарантиран; препоръчва изрично сортиране, ако разчитате на него.
  • В нашето изпълнение, стандартен вътрешен join върна входен ред False; maintain_order="left_right" при join върна True. Една машина, едно изпълнение, една форма на join.
  • Изхвърлянето извън паметта (Out-of-core spilling) е включено по подразбиране: започва при около 80 % от RAM, с бюджет от 64 GB на диска по подразбиране. Изхвърляне извън паметта за join и group_by са в пътната карта.
  • collect_schema() хваща липсваща колона преди да бъдат прочетени каквито и да е данни, но cast, който се проваля само на една стойност, се проваля само при collect().
  • Сравнението TPC-H и TPC-DS е собствено изпълнение на доставчика върху производни данни, а бележката под линия казва, че резултатите не са сравними с официалните бенчмаркове.

Преведен препис

Преведено от оригиналния английски разказ. Наличните аудио и субтитри се контролират от YouTube.

Защо се промени стандартният ред?

0:00 Мислите си, че джойн ви връща редовете в реда, в който сте ги написали. Polars 2.0 спря да обещава това, по подразбиране, нарочно. В това видео: защо се промени стандартното поведение? Какво донесе? И кой от вашите скриптове ще се счупи пръв? Това е The Daily Diff, под капака. Polars е библиотека с отворен код за DataFrame: енджин за таблици, който извиквате от Python,

0:20 със своето ядро, написано на Rust. Той е безплатен под MIT лиценз и го инсталирате с pip install polars. Първо една подробност. Превключвателят, който връща стария ред, е аргумент на самия join. Ще се върна към него накрая. От 2.0, collect изпълнява стрийминг енджина по подразбиране. Стриймингът разделя заявката на части, които се изпълняват паралелно, и частите завършват, когато завършат.

0:42 За join, group by и unpivot, версията не обещава ред. Кой е засегнат пръв? Всеки, който сравнява изхода със запазен файл, ред по ред. Този тест може да мине на вашия лаптоп и да се провали на друга машина. Следва ръководството за миграция.

Какво обещава ръководството за миграция?

0:57 В него пише, че точният ред на редовете, показан по-горе, не е гарантиран. Така че, ако разчитате на реда, сортирайте изрично. Изхвърлянето извън паметта (Out-of-core) също е включено по подразбиране. Започва да изхвърля на диск при около осемдесет процента от RAM, с бюджет от шестдесет и четири гигабайта. Сортиране, прозоречни функции и много изрази вече могат да изхвърлят. Джойновете и group-by-овете предстоят.

Честна ли е бенчмарк битката?

1:17 Polars казва, че побеждава DataFusion и DuckDB на TPC-H и TPC-DS бенчмаркове. Числата идват от техните собствени изпълнения, върху производни данни, и тяхната бележка под линия казва, че те не са сравними с официалните резултати. Техните собствени числа казват, че Polars става около три цяло и осем десети пъти по-бърз от шестнадесет ядра до сто деветдесет и две, на TPC-H. Те също така казват, че допълнителните нишки на голямата машина забавят малките заявки.

Какво виждаме, когато го стартираме?

1:41 Изпълнихме същия join два пъти на Polars 2.0.0. Стандартното изпълнение разбърква редовете. С флага, входният ред се запазва. Намерете джойновете, които захранват тест. Всеки join без сортиране след него е решение за реда на редовете, което никога не сте вземали. Polars 2.0 е по-стриктен относно типовете.

По-стриктно означава ли по-рано?

1:58 Проверката на схемата хваща липсваща колона преди да бъдат прочетени каквито и да е данни. Не може да хване cast, който се проваля на един ред, защото тази грешка чака данните. Сега цикъла, който отворих.

Как да върна стария ред?

2:08 Превключвателят е на join. Задайте maintain_order на join или добавете сортиране след него. Ръководството предлага сортиране. Флагът за join запази реда в нашето изпълнение, като редът на лявата страна се запази като ляво, дясно. Присъда, под капака: НУЖДАЕ СЕ ОТ ПРЕГЛЕД (NEEDS REVIEW).

Каква е присъдата?

2:22 Бих прегледал всеки join преди да надстроя. Имате въпрос относно това? Поставете го в коментарите. И това е различното за днес. Аз съм Нико от Axrisi. Обединявайте отговорно.

Източници

  1. Release of Polars 2.0Polars (pola.rs)
  2. Polars 2.0 upgrade guidePolars documentation
  3. Polars homepagePolars (pola.rs)
  4. polars-2.0-benchmark repositoryPolars on GitHub
  5. Release of Polars 2.0 (Hacker News discussion)Hacker News

Свързани видеоклипове

daily · bg · 7.10.2026 г.

Hono ограничава външните заявки за изтегляне, докато поддържащите преразглеждат приема на приноси

Hono деактивира създаването на външни заявки за изтегляне, като същевременно запазва своя код с лиценз MIT. Синдре Сорхус отделно приписа собствените си ограничения на хранилището на ИИ и каза, че под

5:22 ↗
daily · bg · 1.10.2026 г.

Gemini 4 Argon е най-добрият модел на Google. Все още не можете да го използвате.

Google обяви Gemini 4 Argon, своя нов граничен модел, и само доверени киберзащитници могат да го използват. Ето какво показва собствената 19-редова бенчмарк таблица на Google, какво измери независимат

4:53 ↗