Polars: DataFrames in Rust, successor di pandas

Polars (Ritchie Vink, 2020-2022): libreria DataFrame in Rust con binding Python, columnar, lazy evaluation, query optimizer. 10-100x più veloce di pandas su dataset grandi, API fluida alternativa.

Open SourceR&D PolarsRitchie VinkRustDataFramesPythonpandasOpen Source

Limiti di pandas

pandas (Wes McKinney, 2008) è la libreria DataFrame dominante di Python, ma mostra limiti su scale moderne:

  • Single-thread di default — non sfrutta CPU multi-core
  • Eager evaluation — ogni operazione esegue immediatamente
  • Memoria — DataFrame eager-loaded in RAM, problemi con dati > memoria

Polars, creato da Ritchie Vink (ingegnere olandese) dal 2020, risponde con riscrittura in Rust:

  • Rust core con Arrow format sottostante
  • Lazy evaluation — chain di operazioni ottimizzate prima dell’esecuzione
  • Multi-threaded di default
  • Streaming — dataset più grandi di RAM
  • Query optimizer — predicate pushdown, projection pushdown

Licenza MIT. La versione 0.14-0.15 (autunno 2022) consolida maturità produzione, 1.0 raggiunta luglio 2024.

API

Polars ha due modalità:

Eager (familiare a pandas):

import polars as pl
df = pl.read_csv("data.csv")
result = df.filter(pl.col("age") > 30).group_by("country").agg(pl.col("salary").mean())

Lazy (ottimizzata):

result = (
    pl.scan_csv("data.csv")
      .filter(pl.col("age") > 30)
      .group_by("country")
      .agg(pl.col("salary").mean())
      .collect()
)

In lazy mode, Polars costruisce un execution plan, lo ottimizza, poi esegue con minimo overhead.

Performance

Benchmark pubblici (TPC-H, DB-benchmark): Polars 10-100x più veloce di pandas su dataset medi-grandi. Competitivo con Spark su single-node; Dask/Ray per distribuito.

Interoperabilità

Polars integra con:

  • pandas.to_pandas() e .from_pandas()
  • NumPy
  • Arrow (formato dati condiviso con Spark, DuckDB, altri)
  • Parquet, CSV, JSON, Avro
  • PyArrow, pyarrow-flight

Nel contesto italiano

Adoption rapida in data team italiani dal 2023 per scenari dove pandas è troppo lento ma Spark è overkill.


Riferimenti: Polars. Ritchie Vink. Rust + Python bindings. Licenza MIT. Arrow format. Lazy evaluation + query optimizer. 1.0 (luglio 2024). Alternativa moderna a pandas.

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi