Polars 2.0: zašto spajanja više ne zadržavaju redoslijed redova
Polars 2.0 po zadanoj vrijednosti pokreće collect na streamingu.
Polars 2.0 po zadanoj vrijednosti pokreće collect na streamingu. Za join, group_by i unpivot, izdanje više ne garantuje redoslijed ulaznih redova osim ako eksplicitno ne postavite maintain_order ili sort. U našem testu na polars 2.0.0, unutrašnje spajanje od 2.000.000 redova vratilo je redove izvan ulaznog redoslijeda po zadanoj vrijednosti i zadržalo redoslijed s postavljenim maintain_order. Izdanje također uključuje izbacivanje van jezgre i čini tvrdnje o benchmarku vlasništvom dobavljača.
Pročitajte pisano izdanje (engleski) ↗
Šta ovaj video pokriva
- Pozivanje collect() na lazy upitu sada podrazumijevano koristi streaming engine, koji ne garantuje redoslijed redova za join, group_by i unpivot.
- Vodič za migraciju kaže da redoslijed više nije onaj prije 2.0 i nije garantovan; preporučuje eksplicitno sortiranje ako se oslanjate na njega.
- U našem testu, zadano unutrašnje spajanje vratilo je ulazni redoslijed False; maintain_order="left_right" na spajanju vratilo je True. Jedna mašina, jedno pokretanje, jedan oblik spajanja.
- Izbacivanje van jezgre je uključeno po zadanoj vrijednosti: počinje na oko 80% RAM-a, sa zadanim diskovnim budžetom od 64 GB. Spajanje i grupisanje van jezgre su na planu razvoja.
- collect_schema() hvata nedostajuću kolonu prije nego što se bilo koji podatak pročita, ali cast koji ne uspije samo na jednoj vrijednosti ne uspije tek kod collect().
- Poređenje TPC-H i TPC-DS je vlastiti test dobavljača na izvedenim podacima, a fusnota kaže da rezultati nisu uporedivi sa zvaničnim benchmarkovima.
Prevedeni transkript
Prevedeno iz originalne engleske naracije. Dostupan zvuk i titlovi kontroliše YouTube.
Zašto se promijenio zadani redoslijed?
0:00 Misliš da ti spajanje vraća redove onim redom kojim si ih napisao. Polars 2.0 je prestao to obećavati, po zadanoj vrijednosti, namjerno. U ovom videu: zašto se zadana vrijednost promijenila? Šta je dobilo? I koji od tvojih skripti će se prvi pokvariti? Ovo je The Daily Diff, ispod haube. Polars je open-source biblioteka DataFrame-a: engine tabele koji pozivate iz Pythona,
0:20 čija je jezgra napisana u Rustu. Besplatan je pod MIT licencom, i instalirate ga s pip install polars. Jedan detalj prvo. Prekidač koji vraća stari redoslijed je argument samog spajanja. Vratiću se na to na kraju. Od 2.0, collect pokreće streaming engine po zadanoj vrijednosti. Streaming dijeli upit na dijelove koji se izvode paralelno, i dijelovi završavaju kada završe.
0:42 Za join, group by i unpivot, izdanje ne obećava redoslijed. Ko je prvi pogođen? Ko god upoređuje izlaz sa spremljenom datotekom, red po red. Taj test može proći na vašem laptopu i pasti na drugoj mašini. Dalje, vodič za migraciju.
Šta obećava vodič za migraciju?
0:57 Kaže da tačan redoslijed redova prikazan gore nije garantovan. Dakle, ako se oslanjate na redoslijed, eksplicitno sortirajte. Izbacivanje van jezgre je također uključeno po zadanoj vrijednosti. Počinje prebacivanje na disk na oko osamdeset posto RAM-a, sa budžetom od šezdeset četiri gigabajta. Sortiranje, funkcije prozora i mnogi izrazi sada mogu prebacivati. Spajanja i grupisanja dolaze.
Je li benchmark poštena borba?
1:17 Polars kaže da pobjeđuje DataFusion i DuckDB na TPC-H i TPC-DS benchmarkovima. Brojke dolaze iz njihovih vlastitih testova, na izvedenim podacima, a njihova fusnota kaže da nisu uporedive sa zvaničnim rezultatima. Njihove vlastite brojke kažu da Polars postaje oko tri zarez osam puta brži od šesnaest jezgri do sto devedeset dvije, na TPC-H. Također kažu da dodatni threadovi velike mašine usporavaju male upite.
Šta vidimo kada ga pokrenemo?
1:41 Dvaput smo pokrenuli isto spajanje na Polars 2.0.0. Zadano pokretanje miješa redove. S zastavicom, ulazni redoslijed preživljava. Pronađite spajanja koja hrane test. Bilo koje spajanje bez sortiranja poslije toga je odluka o redoslijedu redova koju nikada niste donijeli. Polars 2.0 je stroži u pogledu tipova.
Znači li strože ranije?
1:58 Provjera sheme hvata nedostajuću kolonu prije nego što se bilo koji podatak pročita. Ne može uhvatiti cast koji ne uspije na jednom redu, jer ta greška čeka na podatke. Sada petlja koju sam otvorio.
Kako vratiti stari redoslijed?
2:08 Prekidač živi na spajanju. Postavite maintain order na spajanju, ili dodajte sortiranje poslije toga. Vodič predlaže sortiranje. Zastavica spajanja je zadržala redoslijed u našem testu, s redoslijedom lijeve strane zadržanim kao lijevo, desno. Presuda, ispod haube: potrebno je pregledati.
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



