Polars 2.0: pse bashkimet nuk ruajnë më rendin e rreshtave
Polars 2.0 ekzekuton 'collect' në një motor transmetimi si parazgjedhje.
Polars 2.0 ekzekuton 'collect' në një motor transmetimi si parazgjedhje. Për bashkimin, grupimin dhe 'unpivot', versioni nuk garanton më rendin e rreshtave të hyrjes, përveç nëse vendosni 'maintain_order' ose 'sort' në mënyrë eksplicite. Në ekzekutimin tonë në polars 2.0.0, një bashkim i brendshëm me 2,000,000 rreshta ktheu rreshtat jashtë rendit të hyrjes si parazgjedhje dhe ruajti rendin me 'maintain_order' të vendosur. Versioni gjithashtu aktivizon 'out-of-core spilling' dhe i bën pretendimet e vlerësimit të performancës të vetë shitësit.
Lexoni edicionin e shkruar (anglisht) ↗
Çfarë mbulon kjo video
- Thirrja e collect() në një kërkesë lazy tani përdor motorin e transmetimit si parazgjedhje, i cili nuk garanton rendin e rreshtave për bashkim, grupim dhe 'unpivot'.
- Udhëzuesi i migrimit thotë se rendi nuk është më rendi i para-2.0 dhe nuk garantohet; ai rekomandon një renditje eksplicite nëse mbështeteni tek ai.
- Në ekzekutimin tonë, një bashkim i brendshëm parazgjedhur ktheu rendin e hyrjes False; maintain_order="left_right" në bashkim ktheu True. Një makinë, një ekzekutim, një formë bashkimi.
- Out-of-core spilling është aktiv si parazgjedhje: fillon rreth 80% të RAM-it, me një buxhet disku prej 64 GB si parazgjedhje. Bashkimi dhe grupimi out-of-core janë në rrugë e sipër.
- collect_schema() kap një kolonë që mungon para se të lexohet ndonjë e dhënë, por një cast që dështon në një vlerë të vetme dështon vetëm në collect().
- Krahasimi TPC-H dhe TPC-DS është ekzekutimi i vetë shitësit mbi të dhëna të derivuara, dhe shënimi i tij thotë se rezultatet nuk janë të krahasueshme me vlerësimet zyrtare.
Transkript i përkthyer
Përkthyer nga tregimi origjinal në anglisht. Audio dhe titrat e disponueshme kontrollohen nga YouTube.
Pse ndryshoi rendi parazgjedhur?
0:00 Mendon se një bashkim t'i kthen rreshtat në rendin që i shkrove. Polars 2.0 ndaloi së premtuari këtë, si parazgjedhje, me qëllim. Në këtë video: pse ndryshoi parazgjedhja? Çfarë fitoi? Dhe cili nga skriptet e tua prishet i pari? Ky është The Daily Diff, nën kapak. Polars është një bibliotekë DataFrame me burim të hapur: një motor tabele që e thërret nga Python,
0:20 me thelbin e saj të shkruar në Rust. Është falas nën licencën MIT, dhe e instaloni me pip install polars. Një detaj së pari. Çelësi që kthen rendin e vjetër është një argument i vetë bashkimit. Do të kthehem tek ai në fund. Që nga 2.0, 'collect' ekzekuton motorin e transmetimit si parazgjedhje. Transmetimi e ndan pyetjen në pjesë që ekzekutohen paralelisht, dhe pjesët përfundojnë kur përfundojnë.
0:42 Për bashkimin, grupimin dhe 'unpivot', versioni nuk premton një rend. Kush preket i pari? Kushdo që krahason daljen me një skedar të ruajtur, rresht pas rreshti. Ky test mund të kalojë në laptopin tuaj dhe të dështojë në një makinë tjetër. Më pas, udhëzuesi i migrimit.
Çfarë premton udhëzuesi i migrimit?
0:57 Ai thotë se rendi i saktë i rreshtave i shfaqur më lart nuk garantohet. Pra, nëse mbështeteni në rend, renditni në mënyrë eksplicite. Out-of-core është aktiv edhe si parazgjedhje. Fillon të derdhet në disk rreth tetëdhjetë për qind të RAM-it, me një buxhet prej gjashtëdhjetë e katër gigabajtësh. Renditja, funksionet e dritares dhe shumë shprehje mund të derdhen tani. Bashkimet dhe grupimet po vijnë.
A është vlerësimi një luftë e ndershme?
1:17 Polars thotë se mund DataFusion dhe DuckDB në TPC-H dhe TPC-DS vlerësime. Numrat vijnë nga ekzekutimet e tyre, mbi të dhëna të derivuara, dhe shënimi i tyre thotë se nuk janë të krahasueshme me rezultatet zyrtare. Numrat e tyre thonë se Polars bëhet rreth tre pikë tetë herë më shpejt nga gjashtëmbëdhjetë bërthama në njëqind e nëntëdhjetë e dy, në TPC-H. Ata gjithashtu thonë se fillesat shtesë të makinës së madhe ngadalësojnë pyetjet e vogla.
Çfarë shohim kur e ekzekutojmë?
1:41 Ne ekzekutuam të njëjtin bashkim dy herë në Polars 2.0.0. Ekzekutimi parazgjedhur i përzien rreshtat. Me flamurin, rendi i hyrjes mbijeton. Gjeni bashkimet që ushqejnë një test. Çdo bashkim pa një renditje pas tij është një vendim rendi rreshtash që nuk e keni marrë kurrë. Polars 2.0 është më i rreptë në lidhje me tipet.
A do të thotë më i rreptë më herët?
1:58 Kontrolli i skemës kap një kolonë që mungon para se të lexohet ndonjë e dhënë. Nuk mund të kapë një 'cast' që dështon në një rresht, sepse ai gabim pret për të dhënat. Tani rrethin që hapa.
Si e kthej rendin e vjetër?
2:08 Çelësi qëndron te bashkimi. Vendosni 'maintain order' në bashkim, ose shtoni një renditje pas tij. Udhëzuesi sugjeron renditjen. Flamuri i bashkimit ruajti rendin në ekzekutimin tonë, me rendin e anës së majtë të ruajtur si majta, djathta. Verdikti, nën kapak: KA NEVOJË PËR RISHIKIM.
Cili është verdikti?
2:22 Do të rishikoja çdo bashkim para përmirësimit. Keni ndonjë pyetje rreth kësaj? Vendoseni te komentet. Dhe ky është ndryshimi për sot. Unë jam Niko nga Axrisi. Bashkohuni me përgjegjësi.
Burimet
- 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



