在pyspark中一次读取多个Parquet文件

li9yvcax  于 2021-05-26  发布在  Spark
关注(0)|答案(1)|浏览(557)

我有多个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')内选取文件。有人能帮我一下吗?

rqdpfwrv

rqdpfwrv1#

您可以通过以下方式实现:

id_list = ['1x','2x','3x']
input_df = sqlContext.read.parquet('/user/desktop/').filter(col('id').isin(id_list))

在使用filter操作时,由于spark不执行延迟求值,因此数据集的大小应该没有问题。筛选器将在任何操作之前应用,并且只有您感兴趣的数据将保留在内存中,因此仅将指定ID所需的所有数据或文件读入内存。

相关问题