我在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数据帧后进行过滤,但我会使用比需要更多的内存空间。在
目前,
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
相关问题 更多 >
编程相关推荐