Práce se soubory Parquet

Scaling and Optimizing Data Pipelines with Polars

Liam Brannigan

Data Scientist & Polars Contributor

Formáty ukládání souborů

Diagram datového rámce

Scaling and Optimizing Data Pipelines with Polars

Formát CSV

Diagram znázorňující CSV jako řádkové úložiště, kde je každý záznam uložen přes celý řádek.

Scaling and Optimizing Data Pipelines with Polars

Formát Parquet

Diagram znázorňující Parquet jako sloupcové úložiště, kde jsou hodnoty ze stejného sloupce seskupeny.

Scaling and Optimizing Data Pipelines with Polars

Převod archivu

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

)
Scaling and Optimizing Data Pipelines with Polars

Převod archivu

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)
    .write_parquet("311_Service_Requests.parquet")
)
Scaling and Optimizing Data Pipelines with Polars

Prohlížení souboru Parquet

pl.read_parquet_schema(
    "311_Service_Requests.parquet"
)
Schema(
    "CREATED_DATE": Datetime,
    "TYPE": String,
    "STATUS": String,
    "DEPARTMENT": String,
    "WARD": Int64,
    ...
)
Scaling and Optimizing Data Pipelines with Polars

CSV vs. Parquet

$$

CSV
  • 4,8 GB
  • 14 sekund

$$

Parquet
  • 0,6 GB
  • 1,4 sekundy

ilustrace srovnání CSV a Parquet

Scaling and Optimizing Data Pipelines with Polars

Parquet není vhodný pro přidávání řádků

new_request = {"TYPE": "Pothole", "STATUS": "Open", ...}
  • CSV pro přidávání řádků
  • Parquet pro čtení
Scaling and Optimizing Data Pipelines with Polars

Skupiny řádků v Parquet

Diagram znázorňující soubor Parquet rozdělený do skupin řádků.

Scaling and Optimizing Data Pipelines with Polars

Filtrování pomocí skupin řádků

(
    pl.scan_parquet("311_Service_Requests.parquet")
    .filter(pl.col("CREATED_DATE") < pl.datetime(2020, 1, 1))
)
Scaling and Optimizing Data Pipelines with Polars

Skupiny řádků v Parquet

Diagram souboru Parquet se skupinami řádků.

Scaling and Optimizing Data Pipelines with Polars

Skupiny řádků v Parquet

Diagram souboru Parquet se skupinami řádků a statistikami.

Scaling and Optimizing Data Pipelines with Polars

Skenování s paralelními strategiemi

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

    )
)
Scaling and Optimizing Data Pipelines with Polars

Skenování s paralelními strategiemi

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",
        parallel="row_groups",
    )
)
  • columns
  • prefiltered
  • none
Scaling and Optimizing Data Pipelines with Polars

Nastavení zápisu Parquet

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

)
  • Menší velikost souboru
  • Delší doba čtení a zápisu
Scaling and Optimizing Data Pipelines with Polars

Nastavení zápisu Parquet

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,
    row_group_size=25_000,
)
  • Menší velikost souboru
  • Delší doba čtení a zápisu
  • Více statistik ke čtení
Scaling and Optimizing Data Pipelines with Polars

Pojďme procvičovat!

Scaling and Optimizing Data Pipelines with Polars

Preparing Video For Download...