在rdd上与累加器循环

时间:2018-09-12 13:32:17

标签: 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))
                  .reduceByKey { case (x, y) => (x ++ y) }
keyAcm.add(2)
combined.union(rest)

使用此代码过滤rdd并保留键0(累加器的初始值)和1。然后,我尝试合并其第二个参数并更改键以使用键0和合并数组创建新的rdd。之后,我将此rdd与原始rdd合并,留下过滤后的值(0和1)。最后,将累加器增加两个。如何重复这些步骤直到累加器为10?

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

val rdd: RDD[(Int, String)] = ???
val res: RDD[(Int, Iterable[String])] = rdd.map(x => (x._1 / 2, x._2)).groupByKey()