我有多个实木复合地板文件,按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
我有一个包含所有id值的python列表,如下所示:
id_list = ['1x','2x','3x']
我想同时读取id_list中存在的id的所有文件,并且还想读取对应于month = 8的文件 因此,在此示例中,仅应读取文件1和文件2。
我正在这样做:
sub_path = '/*/*/*/*.parquet'
input_df = sqlContext.read.parquet('/user/desktop/' + 'id={}'.format(*id_list) + sub_path)
这仅选择id_list的第一个ID为id ='1x'的文件。谁能帮我在这里我所缺少的吗?
答案 0 :(得分:0)
您可以通过:
id_list = ['1x','2x','3x']
input_df = sqlContext.read.parquet('/user/desktop/').filter(col('id').isin(id_list))
在使用过滤操作时,由于Spark会进行延迟评估,因此数据集的大小应该没有问题。过滤器将在执行任何操作之前应用,并且只有您感兴趣的数据将被保留在内存中,因此仅将所需的所有数据或文件读取到指定ID的内存中。