使用 PyArrow 从多个文件中读取分区的镶木地板数据集,并根据文件名添加分区键

Read a partitioned parquet dataset from multiple files with PyArrow and add a partition key based on the filename

我有一堆 parquet 文件,每个文件都包含我的数据集的一个子集。假设文件名为 data-N.parquet,其中 N 是一个整数。

我可以全部阅读并随后转换为 pandas 数据帧:

files = glob.glob("data-**.parquet")
ds = pq.ParquetDataset(
    files,
    metadata_nthreads=64,
).read_table(use_threads=True)
df = ds.to_pandas()

这很好用。它想要的是在最终数据框中增加一列,指示数据来自哪个文件。

据我了解,ds 数据是分区的,每个文件一个分区。所以这将是在数据框中包含分区键的问题。

这样可行吗?

分区键目前包含在数据框中。但是,所有现有的分区方案都使用目录名作为键。因此,如果您的数据是 /N/data.parquet/batch=N/data.parquet,就会发生这种情况(您需要在读取数据集时提供分区对象)。

今天(在 pyarrow 中)无法在返回的结果中获取文件名。