+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Polars 2.0: miért nem tartják meg többé a sorrendet az illesztések

A Polars 2.0 alapértelmezetten egy streaming motoron futtatja a collect műveletet.

A Polars 2.0 alapértelmezetten egy streaming motoron futtatja a collect műveletet. Az illesztés, csoportosítás (group_by) és az unpivot műveletek esetén a kiadás már nem garantálja a bemeneti sorok sorrendjét, hacsak nincs kifejezetten beállítva a maintain_order vagy a sort. A polars 2.0.0-s futtatásunk során egy 2 000 000 soros belső illesztés alapértelmezés szerint a bemeneti sorrendtől eltérő sorrendben adta vissza a sorokat, és a maintain_order beállításával megőrizte a sorrendet. A kiadás bekapcsolja az out-of-core spilling funkciót is, és a teljesítménytesztek eredményeit a gyártó sajátjává teszi.

Olvassa el az írott kiadást (angolul) ↗

Amit ez a videó tartalmaz

  • A collect() hívása egy lusta lekérdezésen mostantól alapértelmezetten a streaming motort használja, amely nem garantálja az illesztés, csoportosítás (group_by) és unpivot sorrendjét.
  • Az áttelepítési útmutató szerint a sorrend már nem az 2.0 előtti sorrend, és nem garantált; kifejezett rendezést javasol, ha erre támaszkodunk.
  • A futtatásunk során egy alapértelmezett belső illesztés a bemeneti sorrendet False értékkel adta vissza; a maintain_order="left_right" beállítás az illesztésen True értéket adott vissza. Egy gép, egy futtatás, egy illesztési forma.
  • Az out-of-core spilling alapértelmezetten be van kapcsolva: a RAM körülbelül 80%-ánál kezd el kiírni lemezre, alapértelmezett 64 GB-os lemezkerettel. Az out-of-core join és group_by szerepel az ütemtervben.
  • A collect_schema() elkap egy hiányzó oszlopot, mielőtt bármilyen adatot olvasnának, de egy olyan típuskonverzió, amely csak egy értéken hibázik, csak a collect() műveletnél hibázik.
  • A TPC-H és TPC-DS összehasonlítás a gyártó saját futtatása származtatott adatokon, és a lábjegyzete szerint az eredmények nem összehasonlíthatók hivatalos benchmarkokkal.

Lefordított átirat

Az eredeti angol narrációból fordítva. A rendelkezésre álló hangot és feliratokat a YouTube vezérli.

Miért változott meg az alapértelmezett sorrend?

0:00 Azt gondolod, hogy egy illesztés visszaadja a soraidat abban a sorrendben, ahogy megírtad őket. A Polars 2.0 alapértelmezés szerint szándékosan leállította ennek ígéretét. Ebben a videóban: miért változott meg az alapértelmezés? Mit hozott? És melyik szkripted törik el először? Ez a The Daily Diff, a kulisszák mögött. A Polars egy nyílt forráskódú DataFrame könyvtár: egy táblamotor, amit Pythonból hívhatsz,

0:20 aminek a magja Rustban íródott. Ingyenes az MIT licenc alatt, és pip install polars paranccsal telepíthető. Először egy részlet. Az a kapcsoló, amely visszaállítja a régi sorrendet, maga az illesztés argumentuma. Majd a végén visszatérek rá. A 2.0 óta a collect alapértelmezetten a streaming motort futtatja. A streaming a lekérdezést párhuzamosan futó darabokra osztja, és a darabok akkor fejeződnek be, amikor befejeződnek.

0:42 Az illesztés, a csoportosítás (group by) és az unpivot esetében a kiadás nem ígér sorrendet. Kit érint először? Aki sorról sorra hasonlítja össze a kimenetet egy elmentett fájllal. Ez a teszt átmehet a laptopodon, de elbukhat egy másik gépen. Következik az áttelepítési útmutató.

Mit ígér az áttelepítési útmutató?

0:57 Azt írja, hogy a fent látható pontos sorrend nem garantált. Tehát ha a sorrendre támaszkodsz, rendezd explicit módon. Az out-of-core is alapértelmezés szerint be van kapcsolva. A RAM körülbelül nyolcvan százalékánál kezd el lemezre kiírni, hatvannégy gigabájtos kerettel. A rendezés, az ablakfüggvények és sok kifejezés már most is képes kiírni. Az illesztések és a csoportosítások (group-by) jönnek.

Tisztességes küzdelem a benchmark?

1:17 A Polars azt mondja, hogy felülmúlja a DataFusiont és a DuckDB-t a TPC-H és TPC-DS benchmarkokban. A számok a saját futtatásaikból származnak, származtatott adatokon, és a lábjegyzetük szerint nem hasonlíthatók össze a hivatalos eredményekkel. Saját számaik szerint a Polars körülbelül 3,8-szor gyorsabb lesz tizenhat magról százkilencvenkettőre, a TPC-H-n. Azt is mondják, hogy a nagy gép extra szálai lelassítják a kis lekérdezéseket.

Mit látunk, amikor futtatjuk?

1:41 Kétszer futtattuk ugyanazt az illesztést a Polars 2.0.0-n. Az alapértelmezett futtatás összekeveri a sorokat. A jelzővel a bemeneti sorrend megmarad. Keresd meg azokat az illesztéseket, amelyek egy tesztet táplálnak. Minden olyan illesztés, ami után nincs rendezés, egy olyan sorrendi döntés, amit soha nem hoztál meg. A Polars 2.0 szigorúbb a típusokkal kapcsolatban.

A szigorúbb korábbit jelent?

1:58 A sémaellenőrzés elkap egy hiányzó oszlopot, mielőtt bármilyen adatot beolvasnának. Nem tud elkapni egy olyan típuskonverziót, ami egy soron hibázik, mert az a hiba várja az adatokat. Most a nyitott hurkom.

Hogyan kaphatom vissza a régi sorrendet?

2:08 A kapcsoló az illesztésen él. Állítsd be a maintain order-t az illesztésen, vagy adj hozzá egy rendezést utána. Az útmutató a rendezést javasolja. Az illesztés jelzője megtartotta a sorrendet a futtatásunkban, a bal oldal sorrendjét megőrizve, mint bal, jobb. Ítélet, a kulisszák mögött: NEEDS REVIEW.

Mi az ítélet?

2:22 Minden illesztést felülvizsgálnék a frissítés előtt. Van kérdésed ezzel kapcsolatban? Tedd a kommentekbe. És ez a mai diff. Niko vagyok az Axrisitől. Összevonás felelősségteljesen.

Források

  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

Kapcsolódó videók