Scala 回路内的火花接头产生空隙
我尝试从循环中的另一个RDD通过迭代联合生成RDD,但如果我对循环中的结果RDD执行操作,则结果只能起作用Scala 回路内的火花接头产生空隙,scala,apache-spark,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.
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)
var-rdd:rdd[Int]=sc.emptyRDD
因为(我)无效
对于(i x)
}
//rdd.foreach(println)=>(1,1,1,1)
如果我在循环外部创建rdd1
,那么一切都可以正常工作,但在内部却不行
是否存在一个特定的轻量级操作来解决此问题?需要记住的一件事是,当您将
foreach
操作应用于RDD时,该操作将应用于每个单独的工作者。因此,在第一种情况下,如果您检查每个执行者的标准值,您将从中找到打印的值e> rdd
。如果希望将这些值打印到控制台,可以在驱动程序中聚合rdd的元素(或其子集),然后应用您的函数(例如,rdd.collect.foreach(println)
,rdd.take(3).foreach(println)
,等等).需要记住的一件事是,当您将foreach
操作应用于RDD时,该操作将同时应用于每个工作者。因此,在第一种情况下,如果您检查每个执行器的stdout
,您将从RDD
中找到打印的值。如果您希望将这些值打印到控制台,您可以在驱动程序中聚合RDD的元素(或其子集),然后应用您的函数(例如,RDD.collect.foreach(println)
,RDD.take(3).foreach(println)
,等等)