2015-10-06 42 views
1

我嘗試從循環內的另一個RDD迭代聯合來創建RDD,但如果我對循環內的結果RDD執行操作,結果將獨佔地工作。循環內部的Spark Union給出了void

var rdd : RDD[Int] = sc.emptyRDD 

for (i <- 1 to 5) { 
    val rdd1 = sc.parallelize(Array(1)) 
    rdd = rdd ++ rdd1 
} 
// rdd.foreach(println) => void 

for (i <- 1 to 5) { 
    val rdd1 = sc.parallelize(Array(1)) 
    rdd = rdd ++ rdd1 
    rdd.foreach(x=>x) 
} 
// rdd.foreach(println) => (1,1,1,1,1) 

如果我在循環外創建rdd1一切正常,但不在裏面。

它是否存在解決此問題的特定輕量級操作?

回答

0

需要記住的一件事是,當您將foreach操作應用於RDD時,此操作適用於每個工作人員。因此,在第一種情況下,如果您檢查每個執行者的stdout,您會發現rdd的打印值。如果要將這些值打印到控制檯,可以在驅動程序中聚合RDD(或其子集)的元素,然後應用您的功能(例如rdd.collect.foreach(println)rdd.take(3).foreach(println)等)。