Lavorare con i file Parquet

Scalare e ottimizzare le pipeline di dati con Polars

Liam Brannigan

Data Scientist & Polars Contributor

Formati di archiviazione file

Diagramma di un DataFrame

Scalare e ottimizzare le pipeline di dati con Polars

Formato CSV

Diagramma che mostra CSV come archiviazione per righe, con ogni record su un'intera riga.

Scalare e ottimizzare le pipeline di dati con Polars

Formato Parquet

Diagramma che mostra Parquet come archiviazione colonnare, con i valori della stessa colonna raggruppati.

Scalare e ottimizzare le pipeline di dati con Polars

Convertire l'archivio

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)

)
Scalare e ottimizzare le pipeline di dati con Polars

Convertire l'archivio

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)
    .write_parquet("311_Service_Requests.parquet")
)
Scalare e ottimizzare le pipeline di dati con Polars

Ispezionare un file Parquet

pl.read_parquet_schema(
    "311_Service_Requests.parquet"
)
Schema(
    "CREATED_DATE": Datetime,
    "TYPE": String,
    "STATUS": String,
    "DEPARTMENT": String,
    "WARD": Int64,
    ...
)
Scalare e ottimizzare le pipeline di dati con Polars

CSV vs Parquet

$$

CSV
  • 4,8 GB
  • 14 secondi

$$

Parquet
  • 0,6 GB
  • 1,4 secondi

illustrazione: csv vs parquet

Scalare e ottimizzare le pipeline di dati con Polars

Parquet non è per aggiungere righe

new_request = {"TYPE": "Pothole", "STATUS": "Open", ...}
  • CSV per aggiunte
  • Parquet per letture
Scalare e ottimizzare le pipeline di dati con Polars

Gruppi di righe in Parquet

Diagramma con file Parquet diviso in gruppi di righe.

Scalare e ottimizzare le pipeline di dati con Polars

Filtrare con i gruppi di righe

(
    pl.scan_parquet("311_Service_Requests.parquet")
    .filter(pl.col("CREATED_DATE") < pl.datetime(2020, 1, 1))
)
Scalare e ottimizzare le pipeline di dati con Polars

Gruppi di righe in Parquet

Diagramma di un file Parquet con gruppi di righe.

Scalare e ottimizzare le pipeline di dati con Polars

Gruppi di righe in Parquet

Diagramma di un file Parquet con gruppi di righe e statistiche.

Scalare e ottimizzare le pipeline di dati con Polars

Scansione con strategie parallele

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",

    )
)
Scalare e ottimizzare le pipeline di dati con Polars

Scansione con strategie parallele

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",
        parallel="row_groups",
    )
)
  • columns
  • prefiltered
  • none
Scalare e ottimizzare le pipeline di dati con Polars

Controllare la scrittura Parquet

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,

)
  • File più piccoli
  • Lettura e scrittura più lente
Scalare e ottimizzare le pipeline di dati con Polars

Controllare la scrittura Parquet

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,
    row_group_size=25_000,
)
  • File più piccoli
  • Lettura e scrittura più lente
  • Più statistiche da leggere
Scalare e ottimizzare le pipeline di dati con Polars

Passons à la pratique !

Scalare e ottimizzare le pipeline di dati con Polars

Preparing Video For Download...