我将镶木地板文件存储在如下所示的分区目录结构中:
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 文件?
Stack Overflow 帖子讨论了 PyArrow 的数据集过滤在分区 Parquet 文件中无法按预期工作的问题。用户解释说,即使他们应用了过滤器,结果也包含根据过滤条件应排除的分区。