Lucrul cu fișiere Parquet

Scalarea și optimizarea pipeline-urilor de date cu Polars

Liam Brannigan

Data Scientist & Polars Contributor

Formate de stocare a fișierelor

Diagramă a unui DataFrame

Scalarea și optimizarea pipeline-urilor de date cu Polars

Formatul CSV

Diagramă care arată CSV ca stocare pe rânduri, fiecare înregistrare stocată pe un rând complet.

Scalarea și optimizarea pipeline-urilor de date cu Polars

Formatul Parquet

Diagramă care arată Parquet ca stocare orientată pe coloane, cu valorile din aceeași coloană grupate împreună.

Scalarea și optimizarea pipeline-urilor de date cu Polars

Conversia arhivei

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

)
Scalarea și optimizarea pipeline-urilor de date cu Polars

Conversia arhivei

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)
    .write_parquet("311_Service_Requests.parquet")
)
Scalarea și optimizarea pipeline-urilor de date cu Polars

Inspecția unui fișier Parquet

pl.read_parquet_schema(
    "311_Service_Requests.parquet"
)
Schema(
    "CREATED_DATE": Datetime,
    "TYPE": String,
    "STATUS": String,
    "DEPARTMENT": String,
    "WARD": Int64,
    ...
)
Scalarea și optimizarea pipeline-urilor de date cu Polars

CSV vs. Parquet

$$

CSV
  • 4.8 GB
  • 14 secunde

$$

Parquet
  • 0.6 GB
  • 1.4 secunde

ilustrație CSV vs Parquet

Scalarea și optimizarea pipeline-urilor de date cu Polars

Parquet nu este pentru adăugarea de rânduri

new_request = {"TYPE": "Pothole", "STATUS": "Open", ...}
  • CSV pentru adăugări
  • Parquet pentru citiri
Scalarea și optimizarea pipeline-urilor de date cu Polars

Grupuri de rânduri Parquet

Diagramă a unui fișier Parquet împărțit în grupuri de rânduri.

Scalarea și optimizarea pipeline-urilor de date cu Polars

Filtrare cu grupuri de rânduri

(
    pl.scan_parquet("311_Service_Requests.parquet")
    .filter(pl.col("CREATED_DATE") < pl.datetime(2020, 1, 1))
)
Scalarea și optimizarea pipeline-urilor de date cu Polars

Grupuri de rânduri Parquet

Diagramă a unui fișier Parquet cu grupuri de rânduri.

Scalarea și optimizarea pipeline-urilor de date cu Polars

Grupuri de rânduri Parquet

Diagramă a unui fișier Parquet cu grupuri de rânduri și statistici.

Scalarea și optimizarea pipeline-urilor de date cu Polars

Scanare cu strategii paralele

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

    )
)
Scalarea și optimizarea pipeline-urilor de date cu Polars

Scanare cu strategii paralele

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",
        parallel="row_groups",
    )
)
  • columns
  • prefiltered
  • none
Scalarea și optimizarea pipeline-urilor de date cu Polars

Controlul scrierilor Parquet

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

)
  • Fișiere mai mici
  • Timpi de citire și scriere mai lungi
Scalarea și optimizarea pipeline-urilor de date cu Polars

Controlul scrierilor Parquet

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,
    row_group_size=25_000,
)
  • Fișiere mai mici
  • Timpi de citire și scriere mai lungi
  • Mai multe statistici de citit
Scalarea și optimizarea pipeline-urilor de date cu Polars

Să exersăm!

Scalarea și optimizarea pipeline-urilor de date cu Polars

Preparing Video For Download...