PyArrow 数据集过滤不适用于分区镶木地板文件

问题描述 投票:0回答:1

我将镶木地板文件存储在如下所示的分区目录结构中:

bfl/pnr_group=0/319a1fb5557a342c1b55356ce5123123-0.parquet

当我直接使用 pq.read_table() 读取单个镶木地板文件时,我可以看到数据。然而,当尝试使用 PyArrow 的数据集 API 和过滤来读取它时,我得到空结果:

import pyarrow.dataset as ds
import pyarrow as pa

# This works - has data
import pyarrow.parquet as pq
file_path = 'data/bfl/pnr_group=0/319a1fb5557a342c1b55356ce5123123-0.parquet'
table = pq.read_table(file_path)
print(len(table))  # Shows rows

# This finds the correct files but returns empty data
dataset = ds.dataset(
    'data/bfl',
    format='parquet',
    partitioning=ds.DirectoryPartitioning.discover(['pnr_group'])
)

filter_expr = ds.field('pnr_group') == '0'
filtered_dataset = dataset.filter(filter_expr)
df = filtered_dataset.to_table().to_pandas()  # Returns empty dataframe

数据集架构将“pnr_group”显示为字符串类型,并且 dataset.files 正确列出了所有镶木地板文件。但是,在过滤并转换为 pandas 后,生成的数据框为空。 如何使用 PyArrow 的数据集 API 正确读取和过滤分区的 parquet 文件?

python parquet pyarrow
1个回答
0
投票

Stack Overflow 帖子讨论了 PyArrow 的数据集过滤在分区 Parquet 文件中无法按预期工作的问题。用户解释说,即使他们应用了过滤器,结果也包含根据过滤条件应排除的分区。

© www.soinside.com 2019 - 2024. All rights reserved.