我有多个Parquet文件按id分类如下:
/user/desktop/id=1x/year=2020/month=8/day=12/file1.parquet
/user/desktop/id=2x/year=2020/month=8/day=15/file2.parquet
/user/desktop/id=3x/year=2020/month=9/day=11/file3.parquet
/user/desktop/id=4x/year=2020/month=8/day=22/file4.parquet
我有一个python列表,其中包含所有id值,如下所示:
id_list = ['1x','2x','3x']
我想一次读取id\u列表中存在的id的所有文件,还想读取对应于month=8的文件,因此在本例中只应读取file1和file2。
我是这样做的:
sub_path = '/*/*/*/*.parquet'
input_df = sqlContext.read.parquet('/user/desktop/' + 'id={}'.format(*id_list) + sub_path)
这只是在id\u列表的第一个id(id='1x')内选取文件。有人能帮我一下吗?
1条答案
按热度按时间rqdpfwrv1#
您可以通过以下方式实现:
在使用filter操作时,由于spark不执行延迟求值,因此数据集的大小应该没有问题。筛选器将在任何操作之前应用,并且只有您感兴趣的数据将保留在内存中,因此仅将指定ID所需的所有数据或文件读入内存。