如何使用pyarrow存储自定义拼花地板数据集元数据?

2024-05-20 08:21:00 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用pyarrow将自定义元数据存储到ParquetDataset

例如,如果我使用Dask创建拼花地板数据集

import dask
dask.datasets.timeseries().to_parquet('temp.parq')

然后我可以用pyarrow阅读它

import pyarrow.parquet as pq
dataset = pq.ParquetDataset('temp.parq')

但是,我将用于为单个拼花地板文件(在How to write Parquet metadata with pyarrow?中概述)编写元数据的相同方法不适用于ParquetDataset,因为没有replace_schema_metadata函数或类似函数

我想我可能想编写一个定制的_custom_metadata文件,因为我想存储的元数据与整个数据集有关。我想程序类似于:

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')

Tags: to数据importcustomtempmetadaskmetadata
1条回答
网友
1楼 · 发布于 2024-05-20 08:21:00

一种可能性(不能直接回答这个问题)是使用dask

import dask

# Sample data
df = dask.datasets.timeseries()

df.to_parquet('test.parq', custom_metadata={'mymeta': 'myvalue'})

Dask通过将元数据写入目录中的所有文件来实现这一点,包括_common_metadata_metadata

from pathlib import Path
import pyarrow.parquet as pq

files = Path('test.parq').glob('*')

all([b'asdf' in pq.ParquetFile(file).metadata.metadata for file in files])
# True

相关问题 更多 >