Trabajar con archivos Parquet

Escala y optimiza canalizaciones de datos con Polars

Liam Brannigan

Data Scientist & Polars Contributor

Formatos de almacenamiento

Diagrama de un DataFrame

Escala y optimiza canalizaciones de datos con Polars

Formato CSV

Diagrama que muestra CSV como almacenamiento por filas, con cada registro en una fila completa.

Escala y optimiza canalizaciones de datos con Polars

Formato Parquet

Diagrama que muestra Parquet como almacenamiento por columnas, agrupando valores de la misma columna.

Escala y optimiza canalizaciones de datos con Polars

Convertir el archivo

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

)
Escala y optimiza canalizaciones de datos con Polars

Convertir el archivo

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)
    .write_parquet("311_Service_Requests.parquet")
)
Escala y optimiza canalizaciones de datos con Polars

Inspeccionar un archivo Parquet

pl.read_parquet_schema(
    "311_Service_Requests.parquet"
)
Schema(
    "CREATED_DATE": Datetime,
    "TYPE": String,
    "STATUS": String,
    "DEPARTMENT": String,
    "WARD": Int64,
    ...
)
Escala y optimiza canalizaciones de datos con Polars

CSV vs Parquet

$$

CSV
  • 4,8 GB
  • 14 s

$$

Parquet
  • 0,6 GB
  • 1,4 s

ilustración de csv vs parquet

Escala y optimiza canalizaciones de datos con Polars

Parquet no es para añadir filas

new_request = {"TYPE": "Pothole", "STATUS": "Open", ...}
  • CSV para añadir
  • Parquet para leer
Escala y optimiza canalizaciones de datos con Polars

Grupos de filas en Parquet

Diagrama que muestra un archivo Parquet dividido en grupos de filas.

Escala y optimiza canalizaciones de datos con Polars

Filtrar con grupos de filas

(
    pl.scan_parquet("311_Service_Requests.parquet")
    .filter(pl.col("CREATED_DATE") < pl.datetime(2020, 1, 1))
)
Escala y optimiza canalizaciones de datos con Polars

Grupos de filas en Parquet

Diagrama de un archivo Parquet con grupos de filas.

Escala y optimiza canalizaciones de datos con Polars

Grupos de filas en Parquet

Diagrama de un archivo Parquet con grupos de filas y estadísticas.

Escala y optimiza canalizaciones de datos con Polars

Escanear con estrategias en paralelo

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

    )
)
Escala y optimiza canalizaciones de datos con Polars

Escanear con estrategias en paralelo

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",
        parallel="row_groups",
    )
)
  • columns
  • prefiltered
  • none
Escala y optimiza canalizaciones de datos con Polars

Controlar escrituras Parquet

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

)
  • Archivos más pequeños
  • Lecturas y escrituras más lentas
Escala y optimiza canalizaciones de datos con Polars

Controlar escrituras Parquet

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,
    row_group_size=25_000,
)
  • Archivos más pequeños
  • Lecturas y escrituras más lentas
  • Más estadísticas que leer
Escala y optimiza canalizaciones de datos con Polars

¡Vamos a practicar!

Escala y optimiza canalizaciones de datos con Polars

Preparing Video For Download...