es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Esquema para pyarrow.ParquetDataset > columnas de partición

1) Tengo un DataFrame de pandas:

import pandas as pd

df = pd.DataFrame(data={"col1": [1, 2], "col2": [3.0, 4.0], "col3": ["foo", "bar"]})

2) Usando s3fs:

from s3fs import S3FileSystem

s3fs = S3FileSystem(**kwargs)

3) Puedo escribir esto como un dataset de parquet

import pyarrow as pa
import pyarrow.parquet as pq

tbl = pa.Table.from_pandas(df)
root_path = "../parquet_dataset/foo"

pq.write_to_dataset(
    table=tbl,
    root_path=root_path,
    filesystem=s3fs,
    partition_cols=["col3"],
    partition_filename_cb=lambda _: "data.parquet",
)

5) Más tarde, necesito el pq.ParquetSchema para el DataFrame guardado.

import pyarrow as pa
import pyarrow.parquet as pq

dataset = pq.ParquetDataset(root_path, filesystem=s3fs)
schema = dataset.schema

Sin embargo, el dataset de parquet -> “schema” no incluye el esquema de las columnas particionadas.

¿Cómo puedo obtener el esquema de las columnas particionadas?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el esquema de las columnas de partición, puedes utilizar el método pq.ParquetFile para leer los metadatos de uno de los archivos parquet en la partición. Por ejemplo, puedes hacer lo siguiente:

    import pyarrow.parquet as pq
    
    partition_path = "col3=foo/data.parquet"
    parquet_file = pq.ParquetFile("s3://<tu_bucket>/<ruta_al_conjunto_de_datos>/" + partition_path)
    partition_schema = parquet_file.schema
    
    

    Debes reemplazar <tu_bucket> y <ruta_al_conjunto_de_datos> con los valores apropiados de tu bucket de S3 y ruta al conjunto de datos en formato parquet, respectivamente, y partition_path con la ruta de uno de los archivos en la partición de tu interés.

    Ten en cuenta que el esquema de la partición puede no ser necesariamente el mismo para todas las particiones, por lo que es posible que debas repetir este proceso para cada partición para obtener el esquema completo.

Comments are closed.