Polars-Bibliothek für Rust: Das vollständige Handbuch
Polars ist eine leistungsstarke DataFrame-Bibliothek für die Datenanalyse, die in Rust geschrieben ist. Sie bietet eine vertraute API, die an pandas erinnert, übertrifft dieses jedoch deutlich in Geschwindigkeit und Speichereffizienz. Während pandas oft an die Grenzen der Single-Thread-Ausführung und des Arbeitsspeichers stößt, wurde Polars von Grund auf für den Multithread-Betrieb konzipiert und nutzt Lazy Evaluation (Lazy API) zur Optimierung von Abfragen.
Das Hauptziel von Polars ist es, ein Werkzeug für die Verarbeitung großer Datenmengen (von Hunderten Megabyte bis zu mehreren Terabyte) auf einem einzigen Knoten bereitzustellen, ohne auf verteilte Systeme wie Spark zurückgreifen zu müssen. Dies wird durch effizientes Speichermanagement (Zero-Copy, Nutzung von Apache Arrow als Backend), Vektorisierung von Operationen und automatische Parallelisierung erreicht. Für Rust-Entwickler ist Polars nicht nur ein Wrapper um eine Python-Bibliothek, sondern eine native Bibliothek, die die Stärken der Sprache voll ausschöpft: Speichersicherheit, Typsystem und hohe Leistung.
Die Bibliothek bietet zwei APIs: Eager (sofortige Ausführung) und Lazy (verzögerte Ausführung). Die Eager API eignet sich für interaktives Arbeiten und kleine Datensätze, bei denen das Ergebnis sofort sichtbar sein soll. Die Lazy API ermöglicht die Erstellung eines Abfrageplans, der dann optimiert und in einem Durchlauf ausgeführt wird – entscheidend für komplexe Transformationen und große Datenmengen. Polars unterstützt zudem CSV, Parquet, JSON, IPC (Arrow) und Datenbanken via SQL.
Installation
Um Polars in Ihr Rust-Projekt einzubinden, fügen Sie die Abhängigkeit in Ihre Cargo.toml ein:
[dependencies]
polars = "0.44.0" // Prüfen Sie die aktuelle Version auf crates.io
Wenn Sie zusätzliche Funktionen benötigen (z. B. Unterstützung für reguläre Ausdrücke in Strings, Datumsfunktionen oder SQL-Integration), aktivieren Sie die entsprechenden Features:
[dependencies]
polars = { version = "0.44.0", features = ["lazy", "strings", "dtype-date", "dtype-datetime", "sql", "parquet", "csv"] }
Wichtige Features im Überblick:
lazy– Lazy API (für ernsthafte Projekte unverzichtbar)strings– Methoden für String-Operationen (contains, replace, extract)dtype-date,dtype-datetime– Unterstützung für Datumstypensql– SQL-Schnittstelleparquet– Lesen/Schreiben von Parquet-Dateiencsv– Lesen/Schreiben von CSV-Dateienis_in,rank,moment– Zusätzliche Methoden
Führen Sie nach dem Hinzufügen der Abhängigkeit aus:
cargo build
Schnellstart
Ein minimales, funktionsfähiges Beispiel zum Erstellen eines DataFrames und Ausführen einer einfachen Abfrage:
use polars::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// DataFrame aus Vektoren erstellen
let df = df! [
"name" => &["Alice", "Bob", "Charlie"],
"age" => &[25, 30, 35],
"salary" => &[50000, 60000, 70000]
]?;
println!("Original DataFrame:\n{:?}", df);
// Filtern: Wer ist älter als 28?
let filtered = df.clone().lazy()
.filter(col("age").gt(lit(28)))
.collect()?;
println!("Gefiltert (Alter > 28):\n{:?}", filtered);
// Aggregation: Durchschnittsgehalt berechnen
let avg_salary = df.clone().lazy()
.select([col("salary").mean().alias("avg_salary")])
.collect()?;
println!("Durchschnittsgehalt:\n{:?}", avg_salary);
Ok(())
}
Dieser Code erstellt eine Tabelle mit drei Spalten, filtert Zeilen nach dem Alter und berechnet das Durchschnittsgehalt. Beachten Sie die Verwendung von lazy() – selbst für einfache Operationen wird dies empfohlen.
Auch in der Bibliothek
JWT-Token in Java: Vollständiger Leitfaden zur Arbeit mit JSON Web Tokens
HTTP-Client für JavaScript (Node.js): Top-Bibliotheken für die Arbeit mit APIs
GraphQL für C# (.NET): Vollständiger Leitfaden zur Bibliothek GraphQL.NET
Arbeiten mit ZIP-Archiven in TypeScript: Bibliothek JSZip und Hilfsprogramme
Logging für Swift (iOS/macOS): Die besten Bibliotheken und Lösungen