Arbeta med Parquet-filer

Skalning och optimering av datapipelines med Polars

Liam Brannigan

Data Scientist & Polars Contributor

Fillagringsformat

Diagram över en DataFrame

Skalning och optimering av datapipelines med Polars

CSV-format

Diagram som visar CSV som radvis lagring, där varje post sparas över en hel rad.

Skalning och optimering av datapipelines med Polars

Parquet-format

Diagram som visar Parquet som kolumnorienterad lagring, där värden från samma kolumn grupperas tillsammans.

Skalning och optimering av datapipelines med Polars

Konvertera arkivet

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

)
Skalning och optimering av datapipelines med Polars

Konvertera arkivet

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)
    .write_parquet("311_Service_Requests.parquet")
)
Skalning och optimering av datapipelines med Polars

Inspektera en Parquet-fil

pl.read_parquet_schema(
    "311_Service_Requests.parquet"
)
Schema(
    "CREATED_DATE": Datetime,
    "TYPE": String,
    "STATUS": String,
    "DEPARTMENT": String,
    "WARD": Int64,
    ...
)
Skalning och optimering av datapipelines med Polars

CSV vs Parquet

$$

CSV
  • 4,8 GB
  • 14 sekunder

$$

Parquet
  • 0,6 GB
  • 1,4 sekunder

illustration av csv vs parquet

Skalning och optimering av datapipelines med Polars

Parquet är inte lämpligt för att lägga till rader

new_request = {"TYPE": "Pothole", "STATUS": "Open", ...}
  • CSV för att lägga till rader
  • Parquet för läsning
Skalning och optimering av datapipelines med Polars

Parquets radgrupper

Diagram som visar en Parquet-fil uppdelad i radgrupper.

Skalning och optimering av datapipelines med Polars

Filtrera med radgrupper

(
    pl.scan_parquet("311_Service_Requests.parquet")
    .filter(pl.col("CREATED_DATE") < pl.datetime(2020, 1, 1))
)
Skalning och optimering av datapipelines med Polars

Parquets radgrupper

Diagram över en Parquet-fil med radgrupper.

Skalning och optimering av datapipelines med Polars

Parquets radgrupper

Diagram över en Parquet-fil med radgrupper och statistik.

Skalning och optimering av datapipelines med Polars

Skanna med parallelstrategier

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

    )
)
Skalning och optimering av datapipelines med Polars

Skanna med parallelstrategier

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",
        parallel="row_groups",
    )
)
  • columns
  • prefiltered
  • none
Skalning och optimering av datapipelines med Polars

Styra Parquet-skrivning

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

)
  • Mindre filstorlekar
  • Längre läs- och skrivtider
Skalning och optimering av datapipelines med Polars

Styra Parquet-skrivning

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,
    row_group_size=25_000,
)
  • Mindre filstorlekar
  • Längre läs- och skrivtider
  • Mer statistik att läsa
Skalning och optimering av datapipelines med Polars

Nu kör vi en övning!

Skalning och optimering av datapipelines med Polars

Preparing Video For Download...