gpt4 book ai didi

python - 尽管使用了过滤器,Pyarrow ParquetDataset.read() 在 Hive 分区的 S3 数据集上还是很慢

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:54 24 4
gpt4 key购买 nike

尽管使用了过滤器标志,但尝试从大型 Parquet 数据集中读取一天的速度非常慢。我使用过滤器的方式有问题吗?如果是这样,我可以做什么来纠正这个问题?

我有一个大型 parquet 数据集,其中包含由配置单元分区的 Spark 作业生成的 S3 中的数百万个文件。分区架构如下所示:

s3://bucket-name/dataset-name/year=2019/month=5/day=23

代码如下:

import s3fs
import pyarrow.parquet as pq
s3_path = 's3://bucket-name/dataset-name'
s3 = s3fs.S3FileSystem()
hive_filter = [('year', '=', 2019), ('month', '=', 11), ('day', '=', 13)]
pyarrow_dataset = pq.ParquetDataset(s3_path, filesystem=s3, filters=hive_filter)
pyarrow_table = pyarrow_dataset.read()

如果我指定单日的 S3 路径,运行速度会非常快。不幸的是,这不起作用,因为我经常想一次选择多天的数据,并且不想扫描整个数据集。我的解决方法是拥有一个函数,通过使用 S3 客户端列出目录来有效地实现过滤器。

其他信息:

  • 在 Jupyter 笔记本中测试时,第一次运行非常慢。后续运行的速度与我指定直至当天的 S3 路径时的速度相同。我怀疑某种缓存是造成这种情况的原因。不幸的是,我需要第一次运行才能保持高性能。

最佳答案

TL;博士;我认为您提到的解决方法是必需的(传递路径列表来构造 ParquetDataSet)。

不幸的是,出现filters are applied after discovering all partitions在桶里。因此,我相信,所花费的时间是构建分区列表,然后正如您所指出的那样进行缓存。将这种逻辑插入 C++ 的工作正在进行中。快速浏览一下 implementation目前尚不清楚是否有逻辑可以更智能地做到这一点。可能值得在 issues.apache.org 上打开 JIRA 问题以更好地支持此用例,或向 Apache Arrow 开发邮件列表发送电子邮件以讨论此用例。

关于python - 尽管使用了过滤器,Pyarrow ParquetDataset.read() 在 Hive 分区的 S3 数据集上还是很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58868584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com