如何使用spark map reduce将一堆Parquet文件合并在一起?

i34xakig  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(444)

我在一个目录中有大量的parquet文件,这些文件表示同一数据模式的不同表,我想将它们合并到一个大rdd中。理想情况下,我想做一个map reduce,其中mapper发出小rdd,reducer合并它们。但是,我不知道如何在Map器中发出rdd。有什么想法吗?
下面的第一行生成目录中的文件列表,第二行应该生成完整的rdd。但是,它给出了一个无法序列化的错误,因为我认为您不能在map示例中创建rdd。

arr = map(lambda x: ["/mnt/s3/rds/27jul2017-parquet/%s-%s-%s.parquet" % (x[0], x[1], x[2]), x[1].zfill(10), x[2].zfill(10)], map(lambda x: x.name.split('.')[0].split('-'), dbutils.fs.ls('/mnt/s3/rds/27jul2017-parquet/')))   
result = sorted(arr, key=lambda x: x[1])      
sc.parallelize(arr).map(lambda x: (1, spark.read.parquet(x[0]))).reduceByKey(lambda x,y: x.unionAll(y) )
yvt65v4c

yvt65v4c1#

而不是在 spark.read.parquet 指定目录,您将得到一个包含所有数据的Dataframe(不是rdd):

df = spark.read.parquet("/mnt/s3/rds/27jul2017-parquet/")
``` `map` 迭代您的rdd行以操作更改,如果可以,它将无法加载文件您将得到一个行为Dataframe的rdd。。。

相关问题