Polars 2.0: γιατί οι συνδέσεις δεν διατηρούν πλέον τη σειρά των γραμμών τους
Το Polars 2.0 εκτελεί το collect σε μια μηχανή ροής από προεπιλογή.
Το Polars 2.0 εκτελεί το collect σε μια μηχανή ροής από προεπιλογή. Για join, group_by και unpivot, η έκδοση δεν εγγυάται πλέον τη σειρά γραμμών εισόδου, εκτός εάν ορίσετε ρητά maintain_order ή sort. Στην εκτέλεσή μας στο polars 2.0.0, μια εσωτερική σύνδεση 2.000.000 γραμμών επέστρεψε γραμμές εκτός σειράς εισόδου από προεπιλογή και διατήρησε τη σειρά με το maintain_order set. Η έκδοση ενεργοποιεί επίσης την υπερχείλιση εκτός πυρήνα και κάνει τις αξιώσεις συγκριτικής αξιολόγησης του ίδιου του προμηθευτή.
Διαβάστε την γραπτή έκδοση (Αγγλικά) ↗
Τι καλύπτει αυτό το βίντεο
- Η κλήση collect() σε ένα lazy query χρησιμοποιεί τώρα τη μηχανή ροής από προεπιλογή, η οποία δεν εγγυάται τη σειρά γραμμών για join, group_by και unpivot.
- Ο οδηγός μετεγκατάστασης αναφέρει ότι η σειρά δεν είναι πλέον η σειρά προ-2.0 και δεν είναι εγγυημένη. Συνιστά μια ρητή ταξινόμηση εάν βασίζεστε σε αυτήν.
- Στην εκτέλεσή μας, μια προεπιλεγμένη εσωτερική σύνδεση επέστρεψε False ως σειρά εισόδου. Το maintain_order="left_right" στη σύνδεση επέστρεψε True. Ένα μηχάνημα, μία εκτέλεση, ένα σχήμα σύνδεσης.
- Η υπερχείλιση εκτός πυρήνα είναι ενεργοποιημένη από προεπιλογή: ξεκινά περίπου στο 80 % της RAM, με προϋπολογισμό δίσκου 64 GB από προεπιλογή. Οι συνδέσεις και οι ομαδοποιήσεις εκτός πυρήνα βρίσκονται στον οδικό χάρτη.
- Το collect_schema() εντοπίζει μια λείπουσα στήλη πριν διαβαστεί οποιαδήποτε δεδομένα, αλλά μια μετατροπή που αποτυγχάνει σε μία μόνο τιμή αποτυγχάνει μόνο στο collect().
- Η σύγκριση TPC-H και TPC-DS είναι η ίδια η εκτέλεση του προμηθευτή σε παραγόμενα δεδομένα, και η υποσημείωσή της αναφέρει ότι τα αποτελέσματα δεν είναι συγκρίσιμα με επίσημες συγκριτικές αξιολογήσεις.
Μεταφρασμένη μεταγραφή
Μεταφράστηκε από την πρωτότυπη αγγλική αφήγηση. Ο διαθέσιμος ήχος και οι υπότιτλοι ελέγχονται από το YouTube.
Γιατί άλλαξε η προεπιλεγμένη σειρά;
0:00 Πιστεύετε ότι μια σύνδεση επιστρέφει τις γραμμές σας με τη σειρά που τις γράψατε. Το Polars 2.0 έπαψε να το υπόσχεται αυτό, από προεπιλογή, επίτηδες. Σε αυτό το βίντεο: γιατί άλλαξε η προεπιλογή; Τι κέρδισε; Και ποιο από τα σενάριά σας θα χαλάσει πρώτο; Αυτό είναι το The Daily Diff, κάτω από την κουκούλα. Το Polars είναι μια βιβλιοθήκη DataFrame ανοιχτού κώδικα: μια μηχανή πίνακα που καλείτε από την Python,
0:20 με τον πυρήνα της γραμμένο σε Rust. Είναι δωρεάν με την άδεια MIT, και την εγκαθιστάτε με pip install polars. Μια λεπτομέρεια πρώτα. Ο διακόπτης που επαναφέρει την παλιά σειρά είναι ένα όρισμα της ίδιας της σύνδεσης. Θα επανέλθω σε αυτό στο τέλος. Από την έκδοση 2.0, το collect εκτελεί τη μηχανή ροής από προεπιλογή. Η ροή χωρίζει το ερώτημα σε κομμάτια που εκτελούνται παράλληλα, και τα κομμάτια ολοκληρώνονται όταν ολοκληρωθούν.
0:42 Για join, group by και unpivot, η έκδοση δεν υπόσχεται μια σειρά. Ποιος επηρεάζεται πρώτος; Όποιος συγκρίνει την έξοδο με ένα αποθηκευμένο αρχείο, γραμμή προς γραμμή. Αυτή η δοκιμή μπορεί να περάσει στον φορητό υπολογιστή σας και να αποτύχει σε διαφορετικό μηχάνημα. Στη συνέχεια, ο οδηγός μετεγκατάστασης.
Τι υπόσχεται ο οδηγός μετεγκατάστασης;
0:57 Λέει ότι η ακριβής σειρά γραμμών που εμφανίζεται παραπάνω δεν είναι εγγυημένη. Οπότε αν βασίζεστε στη σειρά, ταξινομήστε ρητά. Το Out-of-core είναι επίσης ενεργοποιημένο από προεπιλογή. Αρχίζει να υπερχειλίζει στο δίσκο περίπου στο ογδόντα τοις εκατό της RAM, με προϋπολογισμό εξήντα τεσσάρων gigabyte. Ταξινόμηση, συναρτήσεις παραθύρων και πολλές εκφράσεις μπορούν να υπερχειλίσουν τώρα. Οι συνδέσεις και οι ομαδοποιήσεις έρχονται.
Είναι η συγκριτική αξιολόγηση ένας δίκαιος αγώνας;
1:17 Το Polars λέει ότι ξεπερνά το DataFusion και το DuckDB στα TPC-H και TPC-DS benchmarks. Οι αριθμοί προέρχονται από τις δικές τους εκτελέσεις, σε παραγόμενα δεδομένα, και η υποσημείωσή τους λέει ότι δεν είναι συγκρίσιμα με τα επίσημα αποτελέσματα. Οι δικοί τους αριθμοί λένε ότι το Polars γίνεται περίπου τρεισήμισι φορές ταχύτερο από δεκαέξι πυρήνες σε εκατόν ενενήντα δύο, στο TPC-H. Λένε επίσης ότι τα επιπλέον νήματα του μεγάλου μηχανήματος επιβραδύνουν τα μικρά ερωτήματα.
Τι βλέπουμε όταν το τρέχουμε;
1:41 Εκτελέσαμε την ίδια σύνδεση δύο φορές στο Polars 2.0.0. Η προεπιλεγμένη εκτέλεση ανακατεύει τις γραμμές. Με τη σημαία, η σειρά εισόδου επιβιώνει. Βρείτε τις συνδέσεις που τροφοδοτούν μια δοκιμή. Οποιαδήποτε σύνδεση χωρίς ταξινόμηση μετά από αυτήν είναι μια απόφαση σειράς γραμμών που δεν πήρατε ποτέ. Το Polars 2.0 είναι πιο αυστηρό όσον αφορά τους τύπους.
Σημαίνει το πιο αυστηρό νωρίτερα;
1:58 Ο έλεγχος σχήματος εντοπίζει μια λείπουσα στήλη πριν διαβαστεί οποιαδήποτε δεδομένα. Δεν μπορεί να εντοπίσει μια μετατροπή που αποτυγχάνει σε μία γραμμή, επειδή αυτό το σφάλμα περιμένει τα δεδομένα. Τώρα η επανάληψη που άνοιξα.
Πώς μπορώ να επαναφέρω την παλιά σειρά;
2:08 Ο διακόπτης βρίσκεται στη σύνδεση. Ορίστε το maintain order στη σύνδεση, ή προσθέστε μια ταξινόμηση μετά από αυτήν. Ο οδηγός προτείνει την ταξινόμηση. Η σημαία σύνδεσης διατήρησε τη σειρά στην εκτέλεσή μας, με τη σειρά της αριστερής πλευράς να διατηρείται ως αριστερά, δεξιά. Ετυμηγορία, κάτω από την κουκούλα: NEEDS REVIEW.
Ποια είναι η ετυμηγορία;
2:22 Θα εξέταζα κάθε σύνδεση πριν την αναβάθμιση. Έχετε κάποια ερώτηση σχετικά με αυτό; Βάλτε την στα σχόλια. Και αυτή είναι η διαφορά για σήμερα. Είμαι ο Νίκος από την Axrisi. Συγχωνεύστε υπεύθυνα.
Πηγές
- 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



