Polars 2.0: zašto spajanja više ne zadržavaju redoslijed redaka
Polars 2.0 prema zadanim postavkama pokreće "collect" na streaming mehanizmu.
Polars 2.0 prema zadanim postavkama pokreće "collect" na streaming mehanizmu. Za "join", "group_by" i "unpivot", ovo izdanje više ne jamči redoslijed ulaznih redaka osim ako eksplicitno ne postavite "maintain_order" ili "sort". U našem testu na polars 2.0.0, unutarnje spajanje od 2.000.000 redaka vratilo je retke izvan ulaznog redoslijeda prema zadanim postavkama i zadržalo redoslijed s postavljenim "maintain_order". Izdanje također uključuje "out-of-core spilling" i čini tvrdnje o referentnim vrijednostima vlastitima dobavljača.
Pročitajte pisano izdanje (engleski) ↗
Što ovaj video pokriva
- Pozivanje collect() na lazy upitu sada prema zadanim postavkama koristi streaming mehanizam, koji ne jamči redoslijed redaka za join, group_by i unpivot.
- Vodič za migraciju navodi da redoslijed više nije redoslijed prije verzije 2.0 i nije zajamčen; preporučuje eksplicitno sortiranje ako se na njega oslanjate.
- U našem testu, zadano unutarnje spajanje vratilo je ulazni redoslijed False; maintain_order="left_right" na spajanju vratilo je True. Jedan stroj, jedno pokretanje, jedan oblik spajanja.
- Out-of-core spilling je uključen prema zadanim postavkama: počinje na oko 80 % RAM-a, sa zadanim diskovnim proračunom od 64 GB. Out-of-core join i group_by su na planu rada.
- collect_schema() hvata nedostajući stupac prije nego što se podaci pročitaju, ali cast koji ne uspije samo na jednoj vrijednosti ne uspijeva tek kod collect().
- Usporedba TPC-H i TPC-DS je vlastito izvođenje dobavljača na izvedenim podacima, a fusnota kaže da rezultati nisu usporedivi sa službenim referentnim vrijednostima.
Prevedeni transkript
Prevedeno iz izvornog engleskog pripovijedanja. Dostupni zvuk i titlovi kontroliraju se putem YouTubea.
Zašto se zadani redoslijed promijenio?
0:00 Misliš da spajanje vraća retke onim redoslijedom kojim si ih napisao. Polars 2.0 prestao je to obećavati, prema zadanim postavkama, namjerno. U ovom videu: zašto se zadana postavka promijenila? Što je time dobiveno? I koja od tvojih skripti se prva pokvari? Ovo je The Daily Diff, ispod haube. Polars je open-source biblioteka DataFrame-a: tablični mehanizam koji pozivaš iz Pythona,
0:20 s jezgrom napisanom u Rustu. Besplatan je pod MIT licencom, a instaliraš ga s pip install polars. Prvo jedan detalj. Prekidač koji vraća stari redoslijed je argument samom spajanju. Vratit ću se na to na kraju. Od verzije 2.0, "collect" prema zadanim postavkama pokreće streaming mehanizam. Streaming dijeli upit na dijelove koji se pokreću paralelno, i dijelovi završavaju kada završe.
0:42 Za "join", "group by" i "unpivot", izdanje ne obećava redoslijed. Tko je prvi pogođen? Onaj tko uspoređuje izlaz s pohranjenom datotekom, redak po redak. Taj test može proći na tvom laptopu i pasti na drugom stroju. Dalje, vodič za migraciju.
Što obećava vodič za migraciju?
0:57 Kaže da točan redoslijed redaka prikazan gore nije zajamčen. Dakle, ako se oslanjaš na redoslijed, eksplicitno sortiraj. Out-of-core je također uključen prema zadanim postavkama. Počinje prelijevanje na disk na oko osamdeset posto RAM-a, s proračunom od šezdeset četiri gigabajta. Sort, funkcije prozora i mnogi izrazi sada se mogu prelijevati. Spajanja i group-bys dolaze.
Je li referentna vrijednost poštena borba?
1:17 Polars kaže da pobjeđuje DataFusion i DuckDB na TPC-H i TPC-DS referentnim vrijednostima. Brojke dolaze iz njihovih vlastitih izvođenja, na izvedenim podacima, a njihova fusnota kaže da nisu usporedive sa službenim rezultatima. Njihove vlastite brojke kažu da Polars postaje oko tri točke osam puta brži od šesnaest jezgri do sto devedeset dvije, na TPC-H. Također kažu da dodatne niti velikog stroja usporavaju male upite.
Što vidimo kada je pokrenemo?
1:41 Dvaput smo pokrenuli isto spajanje na Polars 2.0.0. Zadano pokretanje miješa retke. S zastavicom, ulazni redoslijed opstaje. Pronađi spajanja koja hrane test. Svako spajanje bez sortiranja nakon njega je odluka o redoslijedu redaka koju nikad nisi donio. Polars 2.0 je stroži prema tipovima.
Znači li strože ranije?
1:58 Provjera sheme hvata nedostajući stupac prije nego što se podaci pročitaju. Ne može uhvatiti cast koji ne uspije na jednom retku, jer ta pogreška čeka na podatke. Sada petlja koju sam otvorio.
Kako vratiti stari redoslijed?
2:08 Prekidač živi na spajanju. Postavi "maintain order" na spajanju, ili dodaj sortiranje nakon njega. Vodič predlaže sortiranje. Zastava spajanja zadržala je redoslijed u našem testu, s redoslijedom lijeve strane zadržanim kao lijevo, desno. Presuda, ispod haube: NEEDS REVIEW.
Kakva je presuda?
2:22 Pregledao bih svako spajanje prije nadogradnje. Imate pitanje o ovome? Stavite ga u komentare. I to je razlika za danas. Ja sam Niko iz Axrisija. Spajajte odgovorno.
Izvori
- Release of Polars 2.0Polars (pola.rs)
- Polars 2.0 upgrade guidePolars documentation
- Polars homepagePolars (pola.rs)
- polars-2.0-benchmark repositoryPolars on GitHub
- Release of Polars 2.0 (Hacker News discussion)Hacker News



