Polars 2.0: Zakaj spajanja (joins) ne ohranjajo več vrstnega reda vrstic
Polars 2.0 privzeto izvaja "collect" na pretočnem pogonu.
Polars 2.0 privzeto izvaja "collect" na pretočnem pogonu. Za "join", "group_by" in "unpivot" izdaja ne jamči več vhodnega vrstnega reda vrstic, razen če eksplicitno nastavite "maintain_order" ali "sort". V našem preizkusu na polars 2.0.0 je notranje spajanje z 2.000.000 vrsticami privzeto vrnilo vrstice izven vhodnega vrstnega reda in ohranilo vrstni red z nastavljenim "maintain_order". Izdaja tudi privzeto vklopi razlitje izven jedra (out-of-core spilling) in trditve o zmogljivosti meril uspešnosti pripiše samemu ponudniku.
Preberi pisno izdajo (angleščina) ↗
Kaj zajema ta videoposnetek
- Klicanje collect() na poizvedbi lazy zdaj privzeto uporablja pretočni pogon, ki ne jamči vrstnega reda vrstic za join, group_by in unpivot.
- Priročnik za migracijo pravi, da vrstni red ni več vrstni red pred različico 2.0 in ni zagotovljen; priporoča eksplicitno sortiranje, če se zanašate nanj.
- V našem preizkusu je privzeto notranje spajanje vrnilo False za vhodni vrstni red; maintain_order="left_right" na spajanju je vrnil True. En stroj, en preizkus, ena oblika spajanja.
- Razlitje izven jedra (Out-of-core spilling) je privzeto vklopljeno: začne se pri približno 80 % RAM-a, s privzetim proračunom diska 64 GB. Spajanje in group_by izven jedra sta na načrtu.
- collect_schema() zazna manjkajoči stolpec, preden se preberejo kakršni koli podatki, vendar se pretvorba (cast), ki ne uspe le na eni vrednosti, ne pokvari šele pri collect().
- Primerjava TPC-H in TPC-DS je izvedba ponudnika na izvedenih podatkih, in njena opomba pravi, da rezultati niso primerljivi z uradnimi merili uspešnosti.
Preveden prepis
Prevedeno iz izvirnega angleškega pripovedovanja. Razpoložljivi zvok in podnapisi so nadzorovani s strani YouTuba.
Zakaj se je privzeti vrstni red spremenil?
0:00 Misliš, da spajanje vrne vrstice v vrstnem redu, v katerem si jih napisal. Polars 2.0 je namenoma prenehal to obljubljati, privzeto. V tem videu: zakaj se je privzeta nastavitev spremenila? Kaj je pridobila? In kateri od tvojih skript se bo prvi pokvaril? To je The Daily Diff, pod pokrovom. Polars je odprtokodna knjižnica DataFrame: pogonska tabela, ki jo kličeš iz Pythona,
0:20 s svojim jedrom, napisanim v Rustu. Je brezplačen pod licenco MIT in ga namestite z ukazom pip install polars. Najprej en detajl. Stikalo, ki vrne stari vrstni red, je argument za samo spajanje. K temu se bom vrnil na koncu. Od 2.0 naprej collect privzeto poganja pretočni pogon. Pretakanje razdeli poizvedbo na dele, ki se izvajajo vzporedno, in deli se končajo, ko se končajo.
0:42 Za join, group by in unpivot izdaja ne obljublja vrstnega reda. Kdo bo prvi prizadet? Kdorkoli, ki primerja izhod z shranjeno datoteko, vrstico za vrstico. Ta test lahko uspe na vašem prenosniku in ne uspe na drugem računalniku. Nato priročnik za migracijo.
Kaj obljublja priročnik za migracijo?
0:57 Piše, da natančen vrstni red vrstic, prikazan zgoraj, ni zagotovljen. Torej, če se zanašate na vrstni red, eksplicitno sortirajte. Tudi razlitje izven jedra (Out-of-core) je privzeto vklopljeno. Začne se razlivati na disk pri približno osemdesetih odstotkih RAM-a, s proračunom štiriinšestdeset gigabajtov. Sortiranje, okenske funkcije in številni izrazi se lahko zdaj razlivajo. Spajanja in group-bys prihajajo.
Je merilo uspešnosti pošteno?
1:17 Polars pravi, da premaga DataFusion in DuckDB na merilih TPC-H in TPC-DS. Številke izhajajo iz njihovih lastnih izvedb, na izvedenih podatkih, in njihova opomba pravi, da niso primerljive z uradnimi rezultati. Njihove lastne številke pravijo, da je Polars približno trikrat osemkrat hitrejši od šestnajstih jeder do sto dvaindevetdesetih, na TPC-H. Pravijo tudi, da dodatni niti velikega stroja upočasnjujejo majhne poizvedbe.
Kaj vidimo, ko ga zaženemo?
1:41 Isto spajanje smo dvakrat zagnali na Polars 2.0.0. Privzeta izvedba premeša vrstice. Z zastavico vhodni vrstni red preživi. Poišči spajanja, ki napajajo test. Vsako spajanje brez sortiranja za njim je odločitev o vrstnem redu vrstic, ki je nikoli niste sprejeli. Polars 2.0 je strožji glede tipov.
Ali strožje pomeni prej?
1:58 Preverjanje sheme zazna manjkajoči stolpec, preden se preberejo kakršni koli podatki. Ne more ujeti pretvorbe (cast), ki ne uspe na eni vrstici, ker ta napaka čaka na podatke. Zdaj zanka, ki sem jo odprl.
Kako dobim nazaj stari vrstni red?
2:08 Stikalo je na spajanju. Nastavite maintain order na spajanju ali dodajte sortiranje za njim. Priročnik predlaga sortiranje. Zastavica za spajanje je ohranila vrstni red v našem preizkusu, pri čemer je bil vrstni red leve strani ohranjen kot levo, desno. Sodba, pod pokrovom: NEEDS REVIEW.
Kakšna je sodba?
2:22 Pred nadgradnjo bi pregledal vsako spajanje. Imate vprašanje o tem? Zapišite ga v komentarje. In to je razlika za danes. Sem Niko iz Axrisi. Združujte odgovorno.
Viri
- 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



