¿Cómo almaceno metadatos personalizados en un ParquetDataset
usando pyarrow?
Por ejemplo, si creo un conjunto de datos de Parquet usando Dask
import dask dask.datasets.timeseries().to_parquet('temp.parq')
Entonces puedo leerlo usando pyarrow
import pyarrow.parquet as pq dataset = pq.ParquetDataset('temp.parq')
Sin embargo, el mismo método que usaría para escribir metadatos para un solo archivo de parquet (descrito en ¿Cómo escribir metadatos de Parquet con pyarrow? ) no funciona para un ParquetDataset
, ya que no hay una función replace_schema_metadata
o similar.
Creo que probablemente me gustaría escribir un archivo _custom_metadata
personalizado, ya que los metadatos que me gustaría almacenar pertenecen a todo el conjunto de datos. Me imagino que el procedimiento sería algo similar a:
meta = pq.read_metadata('temp.parq/_common_metadata') custom_metadata = { b'type': b'mydataset' } merged_metadata = { **custom_metadata, **meta.metadata } # TODO: Construct FileMetaData object with merged_metadata new_meta.write_metadata_file('temp.parq/_common_metadata')
Una posibilidad (que no responde directamente a la pregunta) es usar dask .
import dask # Sample data df = dask.datasets.timeseries() df.to_parquet('test.parq', custom_metadata={'mymeta': 'myvalue'})
Dask hace esto escribiendo los metadatos en todos los archivos del directorio, incluidos _common_metadata
y _metadata
.
from pathlib import Path import pyarrow.parquet as pq files = Path('test.parq').glob('*') all([b'mymeta' in pq.ParquetFile(file).metadata.metadata for file in files]) # True