如何解决在pyspark中一次读取多个实木复合地板文件
我有多个实木复合地板文件,按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'的文件。谁能帮我在这里我所缺少的吗?
解决方法
您可以通过:
id_list = ['1x','2x','3x']
input_df = sqlContext.read.parquet('/user/desktop/').filter(col('id').isin(id_list))
在使用过滤操作时,由于Spark会进行延迟评估,因此数据集的大小应该没有问题。过滤器将在执行任何操作之前应用,并且只有您感兴趣的数据将被保留在内存中,因此仅将所需的所有数据或文件读取到指定ID的内存中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。