尽管使用了filters标志,但是尝试从大型实木复合地板数据集中读取一天的信息非常慢。我使用过滤器的方式有问题吗?如果是这样,我该如何解决该问题?
我有一个庞大的镶木地板数据集,其中包含由配置单元配置的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路径的速度相同。我怀疑某种缓存是其原因。不幸的是,我需要第一次跑步才能表现出色。