循环中的Spark Union给出了空白

时间:2015-10-06 15:53:58

标签: scala apache-spark

我尝试从循环内的另一个RDD迭代联合生成RDD,但是如果我对循环内的结果RDD执行操作,结果将独占。

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,一切正常但不在内部。

是否存在解决此问题的特定轻量级操作?

1 个答案:

答案 0 :(得分:0)

要记住的一件事是,当您将foreach操作应用于RDD时,该操作适用于每个单独的工作人员。因此,在第一种情况下,如果您检查每个执行程序的stdout,您将找到rdd的打印值。如果您希望将这些值打印到控制台,可以在驱动程序中聚合RDD(或其子集)的元素,然后应用您的函数(例如rdd.collect.foreach(println)rdd.take(3).foreach(println),等)。