2017-09-06 22 views
1

我在一個表示相同數據模式的不同表格的地方有大量的parquet文件,我想將它們合併成一個大的RDD。理想情況下,我想要做一個映射減少,其中映射器發射小RDD,減速器合併它們。但是,我無法弄清楚如何在映射器中發射RDD。有任何想法嗎?如何使用Spark Map Reduce將一堆鑲木地板文件結合在一起?

下面的第一行生成目錄中的文件列表,第二行應生成完整的RDD。但是,它不能序列化錯誤,因爲我不認爲你可以在地圖實例中創建一個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)) 
+0

https://stackoverflow.com/a/372​​57709/647053 –

+1

可能重複[閱讀實木複合地板文件從多Ple目錄在Pyspark](https://stackoverflow.com/questions/37257111/reading-parquet-files-from-multiple-directories-in-pyspark) –

+0

也看看https://stackoverflow.com/questions/37257111/讀取地板文件從多個目錄在pyspark –

回答

1

除了指定在spark.read.parquet一個文件中指定的目錄,你會得到一個包含所有數據的數據幀(不是RDD):通過您的RDD的行

df = spark.read.parquet("/mnt/s3/rds/27jul2017-parquet/") 

map迭代要操作更改,它不能加載文件,如果它可能最終與RDD的行是數據幀...

相關問題