使用谓词从中筛选行pyarrow.parquet.parquet数据

2024-06-25 07:01:22 发布

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

我在s3上存储了一个parquet数据集,我想从这个数据集中查询特定的行。我可以使用petastorm来实现这一点,但现在我只想使用pyarrow来实现这一点。在

我的尝试是:

import pyarrow.parquet as pq
import s3fs

fs = s3fs.S3FileSystem()

dataset = pq.ParquetDataset(
    'analytics.xxx', 
    filesystem=fs, 
    validate_schema=False, 
    filters=[('event_name', '=', 'SomeEvent')]
)

df = dataset.read_pandas().to_pandas()

但这会返回一个pandas数据帧,就像过滤器不工作一样,也就是说,我有多个值为event_name的行。有什么我遗漏了还是我误解了?我可以在获得pandas数据帧后进行过滤,但我会使用比需要更多的内存空间。在


Tags: 数据nameimporteventpandass3asfs
1条回答
网友
1楼 · 发布于 2024-06-25 07:01:22

目前,filters功能仅在文件级别实现,尚未在行级别实现。在

因此,如果数据集是嵌套层次结构中多个分区parquet文件的集合(这里描述的分区数据集类型:https://arrow.apache.org/docs/python/parquet.html#partitioned-datasets-multiple-files),则可以使用filters参数只读取文件的一个子集。
但是,您还不能使用它只读取单个文件的行组的子集(请参见https://issues.apache.org/jira/browse/ARROW-1796)。在

但是,如果您得到一条指定这样一个无效过滤器的错误消息,那就太好了。我为此开了一期:https://issues.apache.org/jira/browse/ARROW-5572

相关问题 更多 >