【发布时间】:2021-11-06 21:29:25
【问题描述】:
如何使用 pyarrow 将自定义元数据存储到 ParquetDataset?
例如,如果我使用 Dask 创建 Parquet 数据集
import dask
dask.datasets.timeseries().to_parquet('temp.parq')
然后我可以使用 pyarrow 阅读它
import pyarrow.parquet as pq
dataset = pq.ParquetDataset('temp.parq')
但是,我用于为单个 parquet 文件(在 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')
【问题讨论】:
-
您可以将 Parquet 模式转换为 Arrow 模式 (
dataset.schema.to_arrow_schema()),然后将其传递给pq.write_metadata? Arrow 模式中设置的任何元数据都将保存在 Parquet FileMetaData 中。 -
@joris 谢谢,这确实很有帮助,但是,我认为我最初的问题有点误导。我现在更新了它,希望能更清楚地描述我的问题。