Polars 2.0: kodėl sujungimai nebeturi eilučių tvarkos
Polars 2.0 pagal numatytuosius nustatymus vykdo rinkimą srautinio apdorojimo variklyje.
Polars 2.0 pagal numatytuosius nustatymus vykdo rinkimą srautinio apdorojimo variklyje. Sujungimui, grupavimui ir transponavimui, ši versija nebegarantuoja įvesties eilučių tvarkos, nebent aiškiai nustatysite „maintain_order“ arba „sort“. Mūsų bandymuose su polars 2.0.0, 2 000 000 eilučių vidinis sujungimas pagal numatytuosius nustatymus grąžino eilutes ne įvesties tvarka ir išlaikė tvarką su nustatyta „maintain_order“. Ši versija taip pat įjungia išorinį išskirstymą ir leidžia teigti, kad našumo rodikliai yra paties pardavėjo.
Skaityti rašytinę versiją (anglų k.) ↗
Kas aptariama šiame vaizdo įraše
- Iškvietus collect() tingiai užklausai, dabar pagal numatytuosius nustatymus naudojamas srautinio apdorojimo variklis, kuris negarantuoja eilučių tvarkos sujungimui, grupavimui ir transponavimui.
- Migracijos vadovas teigia, kad tvarka nebebus prieš 2.0 versijos tvarka ir negarantuojama; jis rekomenduoja aiškiai rūšiuoti, jei to reikia.
- Mūsų bandymuose numatytasis vidinis sujungimas grąžino „input order False“; „maintain_order="left_right"“ sujungime grąžino „True“. Viena mašina, vienas paleidimas, viena sujungimo forma.
- Išorinis išskirstymas yra įjungtas pagal numatytuosius nustatymus: jis prasideda, kai naudojama apie 80 % RAM, su numatytuoju 64 GB disko biudžetu. Išorinis sujungimas ir grupavimas yra planuojami.
- collect_schema() aptinka trūkstamą stulpelį prieš perskaitant bet kokius duomenis, tačiau konvertavimas, kuris nepavyksta tik su viena reikšme, nepavyksta tik collect() metu.
- TPC-H ir TPC-DS palyginimas yra paties pardavėjo atliktas bandymas su išvestiniais duomenimis, o jo išnašoje teigiama, kad rezultatai nėra lyginami su oficialiais etalonais.
Išverstas transkriptas
Išversta iš originalo anglų kalbos. Galimas garso ir subtitrų valdymas per YouTube.
Kodėl pasikeitė numatytoji tvarka?
0:00 Manote, kad sujungimas grąžina eilutes tokia tvarka, kokia jas parašėte. Polars 2.0 nustojo tai žadėti, pagal numatytuosius nustatymus, sąmoningai. Šiame vaizdo įraše: kodėl pasikeitė numatytoji nuostata? Ką tai davė? Ir kuris iš jūsų scenarijų sugenda pirmas? Tai „The Daily Diff“, po gaubtu. Polars yra atvirojo kodo „DataFrame“ biblioteka: lentelės variklis, kurį iškviečiate iš Python,
0:20 kurio branduolys parašytas Rust kalba. Jis yra nemokamas pagal MIT licenciją, ir jį įdiegiate su „pip install polars“. Pirmiausia viena detalė. Jungiklis, kuris sugrąžina senąją tvarką, yra paties sujungimo argumentas. Prie to grįšiu pabaigoje. Nuo 2.0 versijos „collect“ pagal numatytuosius nustatymus vykdo srautinio apdorojimo variklį. Srautinis apdorojimas padalina užklausą į dalis, kurios vykdomos lygiagrečiai, ir dalys baigiasi, kai jos baigiasi.
0:42 Sujungimui, grupavimui ir transponavimui, ši versija nežada tvarkos. Kas nukentės pirmas? Kas lygina išvestį su išsaugotu failu, eilutė po eilutės. Tas testas gali praeiti jūsų nešiojamame kompiuteryje ir nepavykti kitoje mašinoje. Toliau, migracijos vadovas.
Ką žada migracijos vadovas?
0:57 Jame teigiama, kad tiksli aukščiau parodyta eilučių tvarka negarantuojama. Taigi, jei remiatės tvarka, aiškiai rūšiuokite. Išorinis išskirstymas taip pat yra įjungtas pagal numatytuosius nustatymus. Jis pradeda išskirstyti į diską, kai naudojama apie aštuoniasdešimt procentų RAM, su šešiasdešimt keturių gigabaitų biudžetu. Rūšiavimas, lango funkcijos ir daugelis išraiškų dabar gali būti išskirstytos. Sujungimai ir grupavimai jau pakeliui.
Ar etalonas yra sąžininga kova?
1:17 Polars teigia, kad TPC-H ir TPC-DS etalonuose jis pranoksta DataFusion ir DuckDB. Skaičiai gauti iš jų pačių bandymų, su išvestiniais duomenimis, o jų išnašoje teigiama, kad jie nėra lyginami su oficialiais rezultatais. Jų pačių skaičiai rodo, kad Polars pagreitėja apie tris su aštuoniais dešimtosiomis karto nuo šešiolikos branduolių iki šimto devyniasdešimt dviejų, TPC-H. Jie taip pat teigia, kad didelės mašinos papildomi gijos sulėtina mažas užklausas.
Ką matome, kai paleidžiame?
1:41 Paleidome tą patį sujungimą du kartus Polars 2.0.0 versijoje. Numatytasis paleidimas maišo eilutes. Su vėliavėle įvesties tvarka išlieka. Raskite sujungimus, kurie maitina testą. Bet koks sujungimas be rūšiavimo po jo yra eilučių tvarkos sprendimas, kurio niekada nepriėmėte. Polars 2.0 yra griežtesnis dėl tipų.
Ar griežtesnis reiškia ankstesnis?
1:58 Schemas tikrinimas aptinka trūkstamą stulpelį prieš perskaitant bet kokius duomenis. Jis negali aptikti konvertavimo, kuris nepavyksta vienoje eilutėje, nes ta klaida laukia duomenų. Dabar kilpa, kurią atidariau.
Kaip sugrąžinti senąją tvarką?
2:08 Jungiklis gyvena sujungime. Nustatykite „maintain_order“ sujungime arba pridėkite rūšiavimą po jo. Vadovas siūlo rūšiavimą. Sujungimo vėliavėlė išlaikė tvarką mūsų bandymuose, kairiosios pusės tvarka išliko kaip kairė, dešinė. Verdiktas, po gaubtu: REIKALINGAS PERŽIŪRA.
Koks yra verdiktas?
2:22 Peržiūrėčiau kiekvieną sujungimą prieš atnaujindamas. Turite klausimų apie tai? Parašykite juos komentaruose. Ir tai yra šiandienos skirtumas. Aš esu Niko iš Axrisi. Sujunkite atsakingai.
Šaltiniai
- 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



