我有一个巨大的GZip文件列表,需要将它们转换为Parquet。由于GZip的压缩特性,这无法并行处理一个文件。
然而,由于我有很多个文件,是否有一种相对简单的方法让每个节点处理部分文件?这些文件在HDFS上。我认为我不能使用RDD架构来编写Parquet文件,因为这都是在驱动程序上完成的,而不是在节点本身上完成的。
我可以并行处理文件名列表,编写一个函数来处理本地的Parquets文件并将其保存回HDFS。但是我不知道怎么做。感觉像我错过了一些显而易见的东西,谢谢!
这被标记为重复问题,但实际上并不是如此。我完全清楚Spark读取它们作为RDD而无需担心压缩的能力,我的问题更多的是如何并行地将这些文件转换为结构化的Parquet文件。
如果我知道如何与Parquet文件交互而不使用Spark本身,我可以做这样的事情:
然而,由于我有很多个文件,是否有一种相对简单的方法让每个节点处理部分文件?这些文件在HDFS上。我认为我不能使用RDD架构来编写Parquet文件,因为这都是在驱动程序上完成的,而不是在节点本身上完成的。
我可以并行处理文件名列表,编写一个函数来处理本地的Parquets文件并将其保存回HDFS。但是我不知道怎么做。感觉像我错过了一些显而易见的东西,谢谢!
这被标记为重复问题,但实际上并不是如此。我完全清楚Spark读取它们作为RDD而无需担心压缩的能力,我的问题更多的是如何并行地将这些文件转换为结构化的Parquet文件。
如果我知道如何与Parquet文件交互而不使用Spark本身,我可以做这样的事情:
def convert_gzip_to_parquet(file_from, file_to):
gzipped_csv = read_gzip_file(file_from)
write_csv_to_parquet_on_hdfs(file_to)
# Filename RDD contains tuples with file_from and file_to
filenameRDD.map(lambda x: convert_gzip_to_parquet(x[0], x[1]))
这将允许我并行处理,但是我不知道如何在本地环境中与HDFS和Parquet进行交互。 我想知道以下内容:
1)如何做到这一点
或者..
2)如何使用PySpark以不同的方式并行化此过程