Trabalhando com arquivos Parquet

Dimensionamento e Otimização de Pipelines de Dados com Polars

Liam Brannigan

Data Scientist & Polars Contributor

Formatos de armazenamento de arquivo

Diagrama de um DataFrame

Dimensionamento e Otimização de Pipelines de Dados com Polars

Formato CSV

Diagrama mostrando CSV como armazenamento por linha, com cada registro em uma linha completa.

Dimensionamento e Otimização de Pipelines de Dados com Polars

Formato Parquet

Diagrama mostrando Parquet como armazenamento por colunas, com valores da mesma coluna agrupados.

Dimensionamento e Otimização de Pipelines de Dados com Polars

Convertendo o arquivo

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

)
Dimensionamento e Otimização de Pipelines de Dados com Polars

Convertendo o arquivo

(
    pl.read_csv("311_Service_Requests.csv", try_parse_dates=True)
    .write_parquet("311_Service_Requests.parquet")
)
Dimensionamento e Otimização de Pipelines de Dados com Polars

Inspecionando um arquivo Parquet

pl.read_parquet_schema(
    "311_Service_Requests.parquet"
)
Schema(
    "CREATED_DATE": Datetime,
    "TYPE": String,
    "STATUS": String,
    "DEPARTMENT": String,
    "WARD": Int64,
    ...
)
Dimensionamento e Otimização de Pipelines de Dados com Polars

CSV vs Parquet

$$

CSV
  • 4,8 GB
  • 14 s

$$

Parquet
  • 0,6 GB
  • 1,4 s

ilustração: csv vs parquet

Dimensionamento e Otimização de Pipelines de Dados com Polars

Parquet não é para anexar linhas

new_request = {"TYPE": "Pothole", "STATUS": "Open", ...}
  • CSV para anexos
  • Parquet para leitura
Dimensionamento e Otimização de Pipelines de Dados com Polars

Grupos de linhas no Parquet

Diagrama mostrando arquivo Parquet dividido em grupos de linhas.

Dimensionamento e Otimização de Pipelines de Dados com Polars

Filtrando com grupos de linhas

(
    pl.scan_parquet("311_Service_Requests.parquet")
    .filter(pl.col("CREATED_DATE") < pl.datetime(2020, 1, 1))
)
Dimensionamento e Otimização de Pipelines de Dados com Polars

Grupos de linhas no Parquet

Diagrama de um arquivo Parquet com grupos de linhas.

Dimensionamento e Otimização de Pipelines de Dados com Polars

Grupos de linhas no Parquet

Diagrama de um arquivo Parquet com grupos de linhas e estatísticas.

Dimensionamento e Otimização de Pipelines de Dados com Polars

Scans com estratégias paralelas

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

    )
)
Dimensionamento e Otimização de Pipelines de Dados com Polars

Scans com estratégias paralelas

(
    pl.scan_parquet(
        "311_Service_Requests.parquet",
        parallel="row_groups",
    )
)
  • columns
  • prefiltered
  • none
Dimensionamento e Otimização de Pipelines de Dados com Polars

Controlando gravações Parquet

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

)
  • Arquivos menores
  • Leituras e gravações mais lentas
Dimensionamento e Otimização de Pipelines de Dados com Polars

Controlando gravações Parquet

department_counts.write_parquet(
    "department_counts.parquet",
    compression_level=3,
    row_group_size=25_000,
)
  • Arquivos menores
  • Leituras e gravações mais lentas
  • Mais estatísticas para ler
Dimensionamento e Otimização de Pipelines de Dados com Polars

Vamos praticar!

Dimensionamento e Otimização de Pipelines de Dados com Polars

Preparing Video For Download...