Polars 2.0: proč spojení již nezachovávají pořadí řádků
Polars 2.0 spouští collect na streamovacím enginu ve výchozím nastavení.
Polars 2.0 spouští collect na streamovacím enginu ve výchozím nastavení. U operací join, group_by a unpivot již tato verze negarantuje pořadí vstupních řádků, pokud explicitně nenastavíte maintain_order nebo sort. V našem testu na Polars 2.0.0 vrátila vnitřní join s 2 000 000 řádky ve výchozím nastavení řádky mimo vstupní pořadí a pořadí zachovala s nastavením maintain_order. Tato verze také zapíná přelévání mimo jádro (out-of-core spilling) a benchmarkové tvrzení si dodavatel přisvojuje.
Přečtěte si psané vydání (anglicky) ↗
Co toto video pokrývá
- Volání collect() na líném dotazu nyní ve výchozím nastavení používá streamovací engine, který negarantuje pořadí řádků pro join, group_by a unpivot.
- Migrační průvodce uvádí, že pořadí již není před 2.0 pořadím a není zaručeno; doporučuje explicitní řazení, pokud na něm závisíte.
- V našem testu výchozí vnitřní spojení vrátilo vstupní pořadí False; maintain_order="left_right" u spojení vrátilo True. Jeden stroj, jeden běh, jeden tvar spojení.
- Přelévání mimo jádro (out-of-core spilling) je ve výchozím nastavení zapnuto: začíná přibližně na 80 % RAM, s výchozím rozpočtem 64 GB disku. Out-of-core join a group_by jsou na plánu.
- collect_schema() zachytí chybějící sloupec dříve, než jsou načtena jakákoli data, ale přetypování, které selže pouze u jedné hodnoty, selže až při collect().
- Porovnání TPC-H a TPC-DS je vlastní provedení dodavatele na odvozených datech a jeho poznámka pod čarou uvádí, že výsledky nejsou srovnatelné s oficiálními benchmarky.
Přeložený přepis
Přeloženo z původního anglického vyprávění. Dostupné audio a titulky jsou řízeny YouTube.
Proč se změnilo výchozí pořadí?
0:00 Myslíte si, že spojení vám vrátí řádky v pořadí, ve kterém jste je napsali. Polars 2.0 přestal toto ve výchozím nastavení slibovat, záměrně. V tomto videu: proč se změnilo výchozí nastavení? Co to přineslo? A který z vašich skriptů se rozbije jako první? Toto je The Daily Diff, pod kapotou. Polars je open-source knihovna DataFrame: tabulkový engine, který voláte z Pythonu,
0:20 s jádrem napsaným v Rustu. Je zdarma pod licencí MIT a instaluje se pomocí pip install polars. Nejdříve jeden detail. Přepínač, který vrací staré pořadí, je argumentem samotného spojení. Vrátím se k němu na konci. Od verze 2.0 spouští collect ve výchozím nastavení streamovací engine. Streaming rozděluje dotaz na bloky, které běží paralelně, a bloky se dokončí, když se dokončí.
0:42 Pro join, group by a unpivot, tato verze neslibuje žádné pořadí. Kdo bude zasažen jako první? Každý, kdo porovnává výstup s uloženým souborem, řádek po řádku. Tento test může projít na vašem notebooku a selhat na jiném stroji. Dále, migrační průvodce.
Co slibuje migrační průvodce?
0:57 Uvádí, že přesné pořadí řádků zobrazené výše není zaručeno. Takže pokud se spoléháte na pořadí, explicitně seřadíte. Out-of-core je také ve výchozím nastavení zapnuto. Začíná se přelévat na disk přibližně při osmdesáti procentech RAM, s rozpočtem šedesáti čtyř gigabajtů. Sort, okenní funkce a mnoho výrazů se nyní mohou přelévat. Spojení a group-by přijdou.
Je benchmark férový boj?
1:17 Polars říká, že poráží DataFusion a DuckDB v TPC-H a TPC-DS benchmarcích. Čísla pocházejí z jejich vlastních testů, na odvozených datech, a jejich poznámka pod čarou uvádí, že nejsou srovnatelné s oficiálními výsledky. Jejich vlastní čísla říkají, že Polars zrychlí přibližně 3,8krát z šestnácti jader na sto devadesát dva, na TPC-H. Také říkají, že extra vlákna velkého stroje zpomalují malé dotazy.
Co vidíme, když ho spustíme?
1:41 Dvakrát jsme spustili stejné spojení na Polars 2.0.0. Výchozí spuštění zamíchá řádky. S příznakem zůstane vstupní pořadí zachováno. Najděte spojení, která napájejí test. Jakékoli spojení bez řazení po něm je rozhodnutí o pořadí řádků, které jste nikdy neučinili. Polars 2.0 je přísnější na typy.
Znamená přísnější dříve?
1:58 Kontrola schématu zachytí chybějící sloupec dříve, než jsou načtena jakákoli data. Nemůže zachytit přetypování, které selže na jednom řádku, protože tato chyba čeká na data. Nyní smyčka, kterou jsem otevřel.
Jak získám zpět staré pořadí?
2:08 Přepínač žije na spojení. Nastavte maintain order na spojení, nebo přidejte řazení po něm. Průvodce navrhuje řazení. Příznak spojení zachoval pořadí v našem testu, s pořadím levé strany zachovaným jako levá, pravá. Verdikt, pod kapotou: NEEDS REVIEW.
Jaký je verdikt?
2:22 Před upgradem bych zkontroloval každé spojení. Máte k tomu otázku? Napište ji do komentářů. A to je dnešní diff. Jsem Niko z Axrisi. Slučujte zodpovědně.
Zdroje
- 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



