Polars 2.0: zašto spajanja više ne zadržavaju redosled redova
Polars 2.0 podrazumevano pokreće prikupljanje (collect) na striming motoru.
Polars 2.0 podrazumevano pokreće prikupljanje (collect) na striming motoru. Za spajanje (join), grupisanje (group_by) i pivotiranje (unpivot), izdanje više ne garantuje redosled ulaznih redova osim ako eksplicitno ne postavite maintain_order ili sort. U našem testiranju na Polars 2.0.0, unutrašnje spajanje od 2.000.000 redova je podrazumevano vratilo redove van ulaznog redosleda i zadržalo redosled sa postavljenim maintain_order. Izdanje takođe uključuje prelivanje van jezgra (out-of-core spilling) i čini tvrdnje o benčmarku svojstvenim dobavljaču.
Pročitajte pisano izdanje (engleski) ↗
Šta ovaj video pokriva
- Pozivanje collect() na lenjom upitu sada podrazumevano koristi striming motor, koji ne garantuje redosled redova za join, group_by i unpivot.
- Vodič za migraciju kaže da redosled više nije redosled pre 2.0 i da nije zagarantovan; preporučuje eksplicitno sortiranje ako se oslanjate na njega.
- U našem testu, podrazumevano unutrašnje spajanje vratilo je ulazni redosled False; maintain_order="left_right" na spajanju vratilo je True. Jedna mašina, jedno izvršavanje, jedan oblik spajanja.
- Prelivanje van jezgra (Out-of-core spilling) je podrazumevano uključeno: počinje na oko 80 % RAM-a, sa podrazumevanim budžetom diska od 64 GB. Spajanje i grupisanje van jezgra su na mapi puta.
- collect_schema() hvata nedostajuću kolonu pre nego što se bilo koji podatak pročita, ali konverzija (cast) koja ne uspeva samo na jednoj vrednosti ne uspeva tek kod collect().
- Poređenje TPC-H i TPC-DS je sopstveno testiranje dobavljača na izvedenim podacima, a njihova fusnota kaže da rezultati nisu uporedivi sa zvaničnim benčmarcima.
Preveden transkript
Prevedeno sa originalne engleske naracije. Dostupan audio i titlovi kontrolisani su od strane YouTube-a.
Zašto se podrazumevani redosled promenio?
0:00 Mislite da spajanje vraća redove onim redosledom kojim ste ih napisali. Polars 2.0 je prestao to da obećava, podrazumevano, namerno. U ovom videu: zašto se podrazumevani redosled promenio? Šta je dobio time? I koji od vaših skripti će se prvi pokvariti? Ovo je The Daily Diff, ispod haube. Polars je open-source DataFrame biblioteka: motor tabele koji pozivate iz Pythona,
0:20 sa svojim jezgrom napisanim u Rustu. Besplatan je pod MIT licencom i instalirate ga sa pip install polars. Prvo jedan detalj. Prekidač koji vraća stari redosled je argument samom spajanju. Vratiću se na to na kraju. Od verzije 2.0, collect podrazumevano pokreće striming motor. Striming deli upit na delove koji se izvršavaju paralelno, i delovi se završavaju kada se završe.
0:42 Za join, group by i unpivot, izdanje ne obećava redosled. Ko je prvi na udaru? Onaj ko poredi izlaz sa sačuvanim fajlom, red po red. Taj test može proći na vašem laptopu, a pasti na drugoj mašini. Dalje, vodič za migraciju.
Šta obećava vodič za migraciju?
0:57 Kaže da tačan redosled redova prikazan iznad nije zagarantovan. Dakle, ako se oslanjate na redosled, eksplicitno sortirajte. Prelivanje van jezgra (Out-of-core) je takođe podrazumevano uključeno. Počinje da se preliva na disk na oko osamdeset procenata RAM-a, sa budžetom od šezdeset i četiri gigabajta. Sortiranje, funkcije prozora i mnogi izrazi sada mogu da se preliju. Spajanja i grupisanja dolaze.
Da li je benčmark fer borba?
1:17 Polars kaže da pobeđuje DataFusion i DuckDB na TPC-H i TPC-DS benčmarcima. Brojke dolaze iz njihovih sopstvenih testiranja, na izvedenim podacima, a njihova fusnota kaže da nisu uporedive sa zvaničnim rezultatima. Njihove sopstvene brojke kažu da Polars postaje oko tri puta brži sa šesnaest jezgara na sto devedeset dva, na TPC-H. Takođe kažu da dodatni niti velike mašine usporavaju male upite.
Šta vidimo kada ga pokrenemo?
1:41 Dvaput smo pokrenuli isto spajanje na Polars 2.0.0. Podrazumevano izvršavanje meša redove. Sa zastavicom, ulazni redosled se zadržava. Pronađite spajanja koja napajaju test. Bilo koje spajanje bez sortiranja nakon njega je odluka o redosledu redova koju nikada niste doneli. Polars 2.0 je stroži u pogledu tipova.
Da li strože znači ranije?
1:58 Provera šeme hvata nedostajuću kolonu pre nego što se bilo koji podatak pročita. Ne može da uhvati konverziju koja ne uspeva na jednom redu, jer ta greška čeka podatke. Sada petlja koju sam otvorio.
Kako da vratim stari redosled?
2:08 Prekidač živi na spajanju. Postavite maintain order na spajanju, ili dodajte sortiranje nakon njega. Vodič predlaže sortiranje. Zastavica za spajanje je zadržala redosled u našem testu, sa redosledom leve strane zadržanim kao levo, desno. Presuda, ispod haube: NEEDS REVIEW.
Kakva je presuda?
2:22 Pregledao bih svako spajanje pre nadogradnje. Imate pitanje o ovome? Stavite ga u komentare. I to je diff 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



