Arbeiten mit Parquet-Dateien

Skalieren und Optimieren von Data-Pipelines mit Polars

Liam Brannigan

Data Scientist & Polars Contributor

Dateispeicherformate

Diagramm eines DataFrames

Skalieren und Optimieren von Data-Pipelines mit Polars

CSV-Format

Diagramm zeigt CSV als zeilenweise Speicherung, jede Zeile enthält einen kompletten Datensatz.

Skalieren und Optimieren von Data-Pipelines mit Polars

Parquet-Format

Diagramm zeigt Parquet als spaltenorientierte Speicherung, Werte derselben Spalte sind gruppiert.

Skalieren und Optimieren von Data-Pipelines mit Polars

Archiv konvertieren

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

)
Skalieren und Optimieren von Data-Pipelines mit Polars

Archiv konvertieren

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)
    .write_parquet("311_Service_Requests.parquet")
)
Skalieren und Optimieren von Data-Pipelines mit Polars

Ein Parquet-File inspizieren

pl.read_parquet_schema(
    "311_Service_Requests.parquet"
)
Schema(
    "CREATED_DATE": Datetime,
    "TYPE": String,
    "STATUS": String,
    "DEPARTMENT": String,
    "WARD": Int64,
    ...
)
Skalieren und Optimieren von Data-Pipelines mit Polars

CSV vs. Parquet

$$

CSV
  • 4,8 GB
  • 14 Sekunden

$$

Parquet
  • 0,6 GB
  • 1,4 Sekunden

csv vs parquet illustration

Skalieren und Optimieren von Data-Pipelines mit Polars

Parquet ist nicht zum Anhängen von Zeilen

new_request = {"TYPE": "Pothole", "STATUS": "Open", ...}
  • CSV zum Anhängen
  • Parquet für Reads
Skalieren und Optimieren von Data-Pipelines mit Polars

Parquet Row Groups

Diagramm zeigt eine Parquet-Datei, geteilt in Row Groups.

Skalieren und Optimieren von Data-Pipelines mit Polars

Filtern mit Row Groups

(
    pl.scan_parquet("311_Service_Requests.parquet")
    .filter(pl.col("CREATED_DATE") < pl.datetime(2020, 1, 1))
)
Skalieren und Optimieren von Data-Pipelines mit Polars

Parquet Row Groups

Diagramm einer Parquet-Datei mit Row Groups.

Skalieren und Optimieren von Data-Pipelines mit Polars

Parquet Row Groups

Diagramm einer Parquet-Datei mit Row Groups und Statistiken.

Skalieren und Optimieren von Data-Pipelines mit Polars

Scannen mit Parallelisierungsstrategien

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

    )
)
Skalieren und Optimieren von Data-Pipelines mit Polars

Scannen mit Parallelisierungsstrategien

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",
        parallel="row_groups",
    )
)
  • columns
  • prefiltered
  • none
Skalieren und Optimieren von Data-Pipelines mit Polars

Parquet-Schreibvorgänge steuern

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

)
  • Kleinere Dateigrößen
  • Längere Lese- und Schreibzeiten
Skalieren und Optimieren von Data-Pipelines mit Polars

Parquet-Schreibvorgänge steuern

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,
    row_group_size=25_000,
)
  • Kleinere Dateigrößen
  • Längere Lese- und Schreibzeiten
  • Mehr zu lesende Statistiken
Skalieren und Optimieren von Data-Pipelines mit Polars

Lass uns üben!

Skalieren und Optimieren von Data-Pipelines mit Polars

Preparing Video For Download...