스크립트
00:00:00Der größte Konkurrent von Pandas bringt in Kürze Version 2.0 heraus.
00:00:04Das Polars-Update steht kurz bevor, und die größte Änderung ist wahrscheinlich nicht die, die Sie erwarten.
00:00:09Standardmäßig wird jede Abfrage, die Sie bereits geschrieben haben, auf eine andere Engine verlagert.
00:00:14Sie müssen keine einzige Zeile ändern.
00:00:15Polars garantiert auch nicht mehr, dass Ihre Zeilen in der ursprünglichen Reihenfolge zurückgegeben werden.
00:00:19Das klingt nach einem Rückschritt, ist es aber nicht – es ist der Preis dafür, die erste Änderung zu ermöglichen.
00:00:24Da Polars mit Version 2.0 immer mehr an Zugkraft gewinnt, macht es Pandas zunehmend Konkurrenz.
00:00:30Schauen wir uns das bisher größte Update einmal an.
00:00:37Gut, von Anfang an war Pandas immer der Standard für die meisten Datenarbeiten.
00:00:43Es ist einfach, wird von der Masse genutzt, eignet sich hervorragend für Datenanalysen und ist auch im Machine Learning zentral.
00:00:49Vor einiger Zeit kam dann Polars auf.
00:00:51Es war schon immer schneller als Pandas.
00:00:53Darüber werden wir gleich sprechen.
00:00:54Mit diesem großen 2.0-Update könnte es einer breiteren Akzeptanz nun noch näher kommen.
00:01:00Nach dieser kurzen Vorgeschichte: Polars verfügt im Stillen schon länger über zwei Engines.
00:01:05Die von den meisten genutzte ist die In-Memory-Engine.
00:01:08Sie können sich das wie eine Lagerhalle vorstellen.
00:01:10Sie lädt Ihren gesamten Datensatz auf den Hallenboden und führt jeden Abfrageschritt über die gesamte Fläche aus.
00:01:17Und das ist extrem schnell.
00:01:19Solange alles in den Arbeitsspeicher passt.
00:01:21Die Streaming-Engine funktioniert anders.
00:01:23Anstelle einer riesigen Fläche ist sie jetzt eher wie ein Fließband aufgebaut.
00:01:27Polars zerlegt die Daten in kleine Stücke, die von den Entwicklern “Marcels” genannt werden.
00:01:32Diese Stücke sind so bemessen, dass sie genau in Ihren CPU-Cache passen.
00:01:36Anschließend werden sie durch den Abfrageplan geschleust.
00:01:39Nun können verschiedene Teile der Abfrage weiterlaufen, anstatt auf den gesamten Datensatz zu warten.
00:01:43Woher die Geschwindigkeit kommt.
00:01:44Und letztendlich ist es auch der Weg, um mit Daten zu arbeiten, die größer als Ihr Arbeitsspeicher sind.
00:01:49Aber es gibt einen Haken.
00:01:50Wenn Sie acht Arbeiter an einem Fließband haben, werden sie nicht unbedingt in der Reihenfolge fertig, in der sie begonnen haben.
00:01:56Und Polars eben auch nicht.
00:01:58In Version 2.0 garantieren Joins, GroupBys, Unpivots – in den Docs steht wörtlich “etc.” –
00:02:04nicht mehr die Reihenfolge der Zeilen.
00:02:06Es sei denn, Sie fordern sie explizit an.
00:02:08Wenn Sie gerne Tools programmieren, die Ihren Workflow beschleunigen, abonnieren Sie unbedingt den Kanal.
00:02:11Wir veröffentlichen laufend neue Videos.
00:02:13Richtig, so sieht das in der Praxis aus.
00:02:15Ich führe `uv pip install pre-polars` aus.
00:02:18Und merken Sie sich das `--pre`-Flag.
00:02:20Darauf kommen wir gleich noch einmal zurück.
00:02:22Okay.
00:02:22Ich habe einen LazyFrame mit den Schlüsseln 2, 1, 0.
00:02:27Ich führe einen Left Join mit einem anderen Frame aus und rufe `collect` auf.
00:02:32Und sehen Sie sich das Ergebnis an.
00:02:34Gleicher Code wie in Polars 1.
00:02:35Die Reihenfolge ist nicht mehr garantiert.
00:02:37Derselbe Code verhält sich einfach anders.
00:02:39Jetzt füge ich dem Join `maintain_order="left"` hinzu.
00:02:43Ich kann es erneut ausführen.
00:02:44Ich lasse es hier nochmal laufen.
00:02:45Und die ursprüngliche Reihenfolge ist zurück.
00:02:47Es ist also nicht so, dass Polars unsere Daten zufällig durcheinanderwürfelt.
00:02:51Polars sagt damit lediglich: Wenn die Reihenfolge zählt, musst du das angeben.
00:02:54Du musst es explizit mitteilen.
00:02:56Und hier gibt es noch ein nettes Detail.
00:02:58Führen Sie die `explain`-Funktion für eine Abfrage aus.
00:03:01Das Verhalten wird nicht verschleiert.
00:03:03Man muss nur wissen, wonach man suchen muss.
00:03:05Das ist die große Verhaltensänderung.
00:03:06Aber Version 2.0 ist ungewöhnlich, da es sich nicht wirklich um ein Feature-Release handelt.
00:03:10Es ist eigentlich nur eine Bereinigung.
00:03:12Und hier wird eine ganze Menge aufgeräumt.
00:03:15Ursprünglich aus Pandas übernommen hatte Polars `read_csv`, was unter der Haube jetzt nur noch `scan_csv` mit anschließendem `collect` ist.
00:03:22`LazyFrame.profile` wurde entfernt.
00:03:25Aus `melt` wird nun `unpivot`.
00:03:28`join_nulls` wird zu `nulls_equal`.
00:03:30Das direkte Casten eines Integers zu Categorical wurde entfernt.
00:03:35Hierfür können Sie jetzt den `cat`-Namespace nutzen.
00:03:38Das direkte Casten eines Strings zu einem Datum wurde entfernt.
00:03:41Das betrifft die Umwandlung von String zu Date.
00:03:43Addiert man einen Vorzeichen-behafteten und Vorzeichen-losen 64-Bit-Integer, liefert Polars jetzt `Int128`, statt es in ein Float zu konvertieren und stillschweigend Genauigkeit zu verlieren.
00:03:53Und es gibt noch mehr Änderungen.
00:03:55Nehmen wir `concat`.
00:03:57Das verweigert nun nicht übereinstimmende Zeilenzahlen, anstatt zu raten, was Sie meinten.
00:04:02Das ist tatsächlich eine kluge Entscheidung von Polars.
00:04:05Jede entfernte Funktion wirft einen `AttributeRemovedError`.
00:04:09Dieser teilt Ihnen direkt mit, was sie ersetzt hat.
00:04:12Rufen Sie `melt` auf, sagt der Fehler wörtlich, Sie sollen `unpivot` mit `index` und `on` nutzen.
00:04:17All diese Fehlermeldungen dienen quasi als Anleitung für die korrekte Nutzung.
00:04:20Code ausführen, Fehler provozieren, diesen anhand der Meldung beheben und einfach weitermachen.
00:04:26Und das bringt uns zum Grund, warum Polars für so viele zum täglichen Werkzeug geworden ist.
00:04:31Pandas verlagert viele Probleme in die Laufzeit.
00:04:35Polars versucht, diese durch all das frühzeitig abzufangen.
00:04:37Sie können `collect_schema` aufrufen und falsche Datentypen erkennen, bevor Polars auch nur eine Zeile liest.
00:04:44Es sieht einfach voraus, was gleich passiert.
00:04:47Und es wird immer effizienter.
00:04:48Wo ordnet sich Polars also genau ein?
00:04:50Nun, DuckDB ist in erster Linie auf SQL ausgerichtet.
00:04:53Polars ist eine für Python entwickelte Expression-API.
00:04:56Dann gibt es noch Dask und Spark.
00:04:58Diese sind verteilt.
00:04:59Polars konzentriert sich auf eine einzelne Maschine.
00:05:01Die Open-Source-Bibliothek selbst ist quelloffen.
00:05:04Die Polars-Cloud ist es nicht.
00:05:05Und dieser entscheidende Punkt ändert einiges, wenn wir zur Performance kommen.
00:05:09Laut der Ankündigung soll die neue Streaming-Engine locker fünfmal schneller sein.
00:05:13Ich habe über die Jahre viel mit Polars gearbeitet. Ja, es ist schneller als Pandas, aber Fünffach-Geschwindigkeiten habe ich nie erlebt.
00:05:21Testen Sie es mit größeren Datensätzen.
00:05:23Sie werden definitiv einen Tempounterschied sehen.
00:05:25Es variiert je nach Durchlauf und Datensatz, aber Sie werden den Unterschied spüren und in der Laufzeit sehen.
00:05:30Und das ist wahrscheinlich die wichtigste Unterscheidung im gesamten Release.
00:05:34Der Teil, der es der Engine erlauben würde, auf die Festplatte auszulagern – echtes Out-of-Core-Computing – ist noch nicht enthalten.
00:05:40Heute bedeutet Streaming also verarbeitete Chunks in einer Pipeline.
00:05:43Es bedeutet noch nicht, dass Ihr Datensatz magisch größer als der RAM sein kann.
00:05:46Die 5-fach-Aussage basiert auf den eigenen Erwartungen von Polars.
00:05:50In dem Beitrag gibt es nirgendwo eine Benchmark-Tabelle.
00:05:53Und ehrlich gesagt scheinen die meisten damit vollkommen zufrieden zu sein.
00:05:55Viele Nutzer wirkten glücklich über ein nützliches, wenn auch unspektakuläres Release.
00:05:59Es gibt keine riesige Fülle an neuen Features.
00:06:01Sie müssen nichts komplett Neues lernen.
00:06:02Die Fehlermeldungen beim Programmieren sagen Ihnen direkt, womit Sie alte Funktionen ersetzen müssen.
00:06:07Einfach Breaking Changes aufräumen – SemVer wird genau so genutzt, wie es gedacht ist.
00:06:12Zwei Kritikpunkte tauchen jedoch immer wieder auf.
00:06:14Der erste ist die Zeilenreihenfolge.
00:06:15Wenn `maintain_order` standardmäßig auf `false` steht, kann das böse Bugs im Code verursachen.
00:06:19Weil nichts abstürzt.
00:06:21Ihre Zahlen können nach wie vor völlig korrekt sein.
00:06:23Sie sind lediglich Zeilen in einer anderen Reihenfolge zugeordnet.
00:06:26Das fällt wesentlich schwerer auf als eine Exception.
00:06:29Der zweite Kritikpunkt betrifft den Begriff “Streaming”.
00:06:32Es wurde argumentiert, dass dies für eine Engine verwirrend ist, die noch nicht echt Out-of-Core arbeitet.
00:06:38Hinzu kommen konkrete Bugs im Release Candidate.
00:06:41Seit dem Erscheinen des RC gibt es ein High-Priority-Problem, bei dem
00:06:44`group_by_dynamic` in der Streaming-Engine einen `Datetime out of range`-Fehler wirft.
00:06:49Ruft man die `limit`-Methode auf,
00:06:51bricht `limit` nach einem Join nicht frühzeitig ab.
00:06:54Und `String` zu `Datetime` kann `null` zurückgeben, wo früher ein Fehler geworfen wurde.
00:06:58Deshalb habe ich Ihnen vorhin gesagt, Sie sollen sich das `--pre` beim Installieren merken.
00:07:02Pre 2.0.
00:07:04Es ist eben noch ein Release Candidate.
00:07:06Und genau so verhält er sich derzeit auch.
00:07:08Was auch völlig in Ordnung ist.
00:07:09Oder?
00:07:09Es ist noch nicht die fertige Version.
00:07:11Noch eine Sache.
00:07:12Crate in Rust steht aktuell noch bei Version 0.55.
00:07:15Wenn Sie Polars über Rust nutzen, gibt es für Sie also noch kein Polars 2.0.
00:07:19Ich nehme aber an, dass die meisten von uns hier ohnehin Python nutzen.
00:07:24Sollten Sie also umsteigen?
00:07:25Für ein neues Projekt: Ja, das würde ich machen.
00:07:27Oder?
00:07:27Man passt sich an neue Technologien und Updates an.
00:07:30Wenn Ihre Pipeline bereits `sink_parquet` oder `sink_csv` nutzt, haben Sie
00:07:34Streaming ohnehin schon die ganze Zeit verwendet.
00:07:36Aber es gibt ein paar Anwendungsfälle, in denen ich warten würde.
00:07:39Verstanden?
00:07:39Hängt Ihr Code von der Zeilenreihenfolge ab, upgraden Sie nicht einfach auf gut Glück.
00:07:43Suchen Sie gezielt nach GroupBys, auf die kein `sort` folgt.
00:07:47Wenn Sie `group_by_dynamic` nutzen, würde ich warten, bis sich alles gelegt hat.
00:07:51Es ist jedenfalls spannend zu sehen, wohin die Reise höchstwahrscheinlich geht.
00:07:54Das wird wohl Version 2.0 werden, aber es ist noch nicht das offizielle Release.
00:07:57Sie können sich schon mal einarbeiten, ganz fertig ist es aber noch nicht.
00:08:00Was mich immer wieder beschäftigt, ist, wie ungewöhnlich sich dieses Release anfühlt.
00:08:03Polars 2.0 bringt null neue Features mit.
00:08:07Und dennoch verändert es das Verhalten von bestehendem Code.
00:08:10Die neue Engine ist auf meinem System schneller, nur eben nicht fünfmal schneller.
00:08:142.0 ist also nicht deshalb spannend, weil ein Haufen neuer Kram dazukommt.
00:08:18Es ist spannend, weil Polars den Major-Versionssprung nutzt, um das Fundament gründlich aufzuräumen,
00:08:24das all dem zugrunde liegt, was wir bereits nutzen.
00:08:26Ich bin Josh von BetterStack.
00:08:28Wenn Ihnen solche Programmiertipps gefallen, abonnieren Sie gerne den Kanal.
00:08:30Wir sehen uns im nächsten Video.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기