Travailler avec des fichiers Parquet

Mise à l'échelle et optimisation des pipelines de données avec Polars

Liam Brannigan

Data Scientist & Polars Contributor

Formats de stockage de fichiers

Schéma d'un DataFrame

Mise à l'échelle et optimisation des pipelines de données avec Polars

Format CSV

Schéma montrant le CSV comme stockage par lignes, chaque enregistrement occupant une ligne complète.

Mise à l'échelle et optimisation des pipelines de données avec Polars

Format Parquet

Schéma montrant Parquet comme stockage orienté colonnes, avec les valeurs d'une même colonne regroupées.

Mise à l'échelle et optimisation des pipelines de données avec Polars

Conversion de l'archive

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

)
Mise à l'échelle et optimisation des pipelines de données avec Polars

Conversion de l'archive

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)
    .write_parquet("311_Service_Requests.parquet")
)
Mise à l'échelle et optimisation des pipelines de données avec Polars

Inspecter un fichier Parquet

pl.read_parquet_schema(
    "311_Service_Requests.parquet"
)
Schema(
    "CREATED_DATE": Datetime,
    "TYPE": String,
    "STATUS": String,
    "DEPARTMENT": String,
    "WARD": Int64,
    ...
)
Mise à l'échelle et optimisation des pipelines de données avec Polars

CSV vs Parquet

$$

CSV
  • 4,8 Go
  • 14 secondes

$$

Parquet
  • 0,6 Go
  • 1,4 seconde

illustration csv vs parquet

Mise à l'échelle et optimisation des pipelines de données avec Polars

Parquet n'est pas fait pour ajouter des lignes

new_request = {"TYPE": "Pothole", "STATUS": "Open", ...}
  • CSV pour les ajouts
  • Parquet pour la lecture
Mise à l'échelle et optimisation des pipelines de données avec Polars

Groupes de lignes Parquet

Schéma montrant un fichier Parquet divisé en groupes de lignes.

Mise à l'échelle et optimisation des pipelines de données avec Polars

Filtrer avec les groupes de lignes

(
    pl.scan_parquet("311_Service_Requests.parquet")
    .filter(pl.col("CREATED_DATE") < pl.datetime(2020, 1, 1))
)
Mise à l'échelle et optimisation des pipelines de données avec Polars

Groupes de lignes Parquet

Schéma d'un fichier Parquet avec groupes de lignes.

Mise à l'échelle et optimisation des pipelines de données avec Polars

Groupes de lignes Parquet

Schéma d'un fichier Parquet avec groupes de lignes et statistiques.

Mise à l'échelle et optimisation des pipelines de données avec Polars

Balayage avec stratégies parallèles

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

    )
)
Mise à l'échelle et optimisation des pipelines de données avec Polars

Balayage avec stratégies parallèles

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",
        parallel="row_groups",
    )
)
  • columns
  • prefiltered
  • none
Mise à l'échelle et optimisation des pipelines de données avec Polars

Contrôler l'écriture Parquet

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

)
  • Fichiers plus petits
  • Lectures et écritures plus longues
Mise à l'échelle et optimisation des pipelines de données avec Polars

Contrôler l'écriture Parquet

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,
    row_group_size=25_000,
)
  • Fichiers plus petits
  • Lectures et écritures plus longues
  • Plus de statistiques à lire
Mise à l'échelle et optimisation des pipelines de données avec Polars

Passons à la pratique !

Mise à l'échelle et optimisation des pipelines de données avec Polars

Preparing Video For Download...