Dev News Daily ENDE

Polars 2.0 macht die Streaming-Engine zum Standard und lagert ab etwa 80 % RAM auf die Platte aus

Polars 2.0 ist am 6. Oktober erschienen, angekündigt von Ritchie Vink. Ein großes Feature-Release sollte es laut Projekt nicht werden, doch der Versionssprung bringt mehrere Standards mit, die das Verhalten bestehenden Codes ändern.

Streaming als Standard. collect auf einem LazyFrame nutzt jetzt die Streaming-Engine. Eine Hauptversion war nötig wegen der Zeilenreihenfolge: Streaming garantiert sie bei einigen Operationen nicht, darunter join, group_by und unpivot. Wer dort auf die Reihenfolge angewiesen ist, muss maintain_order=True setzen.

Auslagern standardmäßig an. Polars beginnt nun bei etwa 80 % des Arbeitsspeichers auf die Platte auszulagern, mit einem Standardbudget von 64 GB, für Operationen, die das schon können (Sortieren, Fensterfunktionen, viele Ausdrücke). Joins und Group-by sollen folgen.

Polars 2.0 macht die Streaming-Engine zum Standard und lagert ab etwa 80 % RAM auf die Platte aus
Polars 2.0 macht die Streaming-Engine zum Standard und lagert ab etwa 80 % RAM auf die Platte aus — Dev News Daily

Ein Map-Typ. Arrows MapType wird jetzt als eigener Polars-Datentyp Map mit wörterbuchartigen Ausdrücken gelesen statt als List(Struct(key, value)).

Strengere Typen. Fehler sollen laut Projekt auftauchen, bevor eine Pipeline läuft; mit collect_schema() können Menschen und Agenten die Typen einer Abfrage prüfen, ohne Daten zu berechnen.

Die Benchmarks. Polars ließ aus TPC-H und TPC-DS abgeleitetes SQL gegen DuckDB 1.5.6, eine DuckDB-2.0-Alpha und DataFusion 54.0.0 auf zwei AWS-Maschinen (16 und 192 vCPUs) laufen, jeweils der beste von fünf warmen Läufen. Standard-Polars sei bis auf einen Benchmark überall am schnellsten; bei 192 Threads gebe es einen konstanten Overhead, der kleine Abfragen bremst. DataFusion lief bei einigen Abfragen in Timeouts oder Speichermangel; diese wurden für alle Engines ausgeklammert. Der Benchmark-Code liegt zum Nachprüfen unter github.com/pola-rs/polars-2.0-benchmark.