【问题标题】:Spark Union inside a loop gives void循环内的 Spark Union 产生 void
【发布时间】:2015-10-07 03:08:28
【问题描述】:

我尝试从循环内的另一个 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 一切正常,但内部不行。

是否存在特定的轻量级动作来解决这个问题?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2014-12-22
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 2011-10-31
      • 2013-03-31
      相关资源
      最近更新 更多