2015-06-17 72 views
2

將RDD寫入文件之前執行以下轉換之間的區別是什麼?Apache Spark中的混洗與非混洗聚結

  1. COALESCE(1,隨機播放= TRUE)
  2. COALESCE(1,隨機播放= FALSE)

代碼示例:

val input = sc.textFile(inputFile) 
val filtered = input.filter(doSomeFiltering) 
val mapped = filtered.map(doSomeMapping) 

mapped.coalesce(1, shuffle = true).saveAsTextFile(outputFile) 
vs 
mapped.coalesce(1, shuffle = false).saveAsTextFile(outputFile) 

它是如何與收集比較() ?我完全知道Spark保存方法會將其與HDFS風格的結構一起存儲,但我更關注collect()和shuffled/non-shuffle coalesce()的數據分區方面。

回答

3

shuffle = true和shuffle = false在結果輸出中不會有任何實際差異,因爲它們都會下降到單個分區。但是,如果將其設置爲true,則會執行無用的隨機播放。隨着shuffle = true,輸出在分區間均勻分佈(如果需要,也可以增加分區數量),但由於您的目標是1分區,因此無論如何,所有內容都以一個分區結尾。

至於比較collect(),所不同的是所有的數據都存儲在一個執行器上而不是驅動器上。

+1

我不確定這是否正確。我已經看到了RDD計劃結構中輸出分區數量的限制,以迫使其他操作也使用較低數量(本例中爲1)的分區。這通常不是你想要的。 –