Scala rdd上带累加器的循环

Scala rdd上带累加器的循环,scala,apache-spark,spark-streaming,Scala,Apache Spark,Spark Streaming,我想循环n次,其中n是同一rdd上的累加器 假设n=10,我希望下面的代码循环5次,因为累加器增加了2 val key = keyAcm.value.toInt val rest = rdd.filter(_._1 > (key + 1)) val combined = rdd.filter(k => (k._1 == key) || (k._1 == key + 1)) .map(x => (key, x._2))

我想循环n次,其中n是同一rdd上的累加器

假设n=10,我希望下面的代码循环5次,因为累加器增加了2

val key = keyAcm.value.toInt
val rest = rdd.filter(_._1 > (key + 1))
val combined = rdd.filter(k => (k._1 == key) || (k._1 == key + 1))
                  .map(x => (key, x._2))
                  .reduceByKey { case (x, y) => (x ++ y) }
keyAcm.add(2)
combined.union(rest)
使用这段代码,我过滤rdd,并保留累加器的初始值0和1。然后,我尝试合并它的第二个参数并更改键,以创建一个具有键0和合并数组的新rdd。之后,我将这个rdd与原始rdd合并,留下过滤后的值0和1。最后,我将累加器增加2。如何重复这些步骤,直到累加器达到10


有什么想法吗?

不清楚你想达到什么目的。请删除问题中的所有具体细节,只保留必要的内容。蓄能器不应该这样使用。只能在地图、过滤器等内部的工人身上写入累加器,而不能在驾驶员身上写入。蓄能器的读数必须仅发生在驱动器上。你正在做反之亦然。我希望每两个键合并第二个参数,而不会导致suffleval rdd:rdd[Int,Array[Int]]你的答案会触发suffle吗?如果k=1和k=2的数据位于不同的分区上,则无法将其合并而不进行无序排列。
val rdd: RDD[(Int, String)] = ???
val res: RDD[(Int, Iterable[String])] = rdd.map(x => (x._1 / 2, x._2)).groupByKey()