我在一个目录中有大量的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) )
1条答案
按热度按时间yvt65v4c1#
而不是在
spark.read.parquet
指定目录,您将得到一个包含所有数据的Dataframe(不是rdd):