Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyarrow ParquetDataset.read()在配置单元分区的S3数据集上运行缓慢,尽管使用了过滤器_Python_Amazon S3_Hive_Pyarrow - Fatal编程技术网

Python Pyarrow ParquetDataset.read()在配置单元分区的S3数据集上运行缓慢,尽管使用了过滤器

Python Pyarrow ParquetDataset.read()在配置单元分区的S3数据集上运行缓慢,尽管使用了过滤器,python,amazon-s3,hive,pyarrow,Python,Amazon S3,Hive,Pyarrow,尽管使用了filters标志,但尝试从大型拼花地板数据集中读取一天的数据非常慢。我使用过滤器的方式有问题吗?如果是,我可以做些什么来纠正这个问题 我有一个很大的拼花地板数据集,S3中有数百万个文件,这些文件是由配置单元分区的spark作业生成的。分区模式如下所示: s3://bucket-name/dataset-name/year=2019/month=5/day=23 代码如下: import s3fs import pyarrow.parquet as pq s3_path = 's3:

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

我有一个很大的拼花地板数据集,S3中有数百万个文件,这些文件是由配置单元分区的spark作业生成的。分区模式如下所示:

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)


      不幸的是,它出现在桶中。因此,我相信,所花费的时间是构建分区列表,然后正如您所指出的,这些分区被缓存。有很多工作要把这个逻辑推进到C++中。快速查看一下,目前还不清楚是否有逻辑可以更智能地执行此操作。在issues.apache.org上打开JIRA问题以更好地支持此用例,或者通过电子邮件发送apache Arrow dev邮件列表来讨论此用例,这可能是值得的;博士我认为您提到的解决方法是必需的(传递一个路径列表来构建ParquetDataSet)

      不幸的是,它出现在桶中。因此,我相信,所花费的时间是构建分区列表,然后正如您所指出的,这些分区被缓存。有很多工作要把这个逻辑推进到C++中。快速查看一下,目前还不清楚是否有逻辑可以更智能地执行此操作。在issues.apache.org上打开一个JIRA问题以更好地支持此用例,或者通过电子邮件发送apache Arrow dev邮件列表来讨论此用例可能是值得的。

      打开以确定此功能是否存在(如果不跟踪实现),打开以确定此功能是否存在(如果不跟踪实现)