对于scala spark case中的循环问题

时间:2016-09-25 00:07:41

标签: scala for-loop apache-spark scala-collections

希望按键比较rdds字段,并尝试填充不匹配的数组字段但无法用于循环。

下面的代码,其中for循环注释正在进行第一次现场检查,但我想用for循环来覆盖所有字段比较

任何想法如何使循环工作,以便可以填充a,b中不相等的所有字段?

---a is of String type
---b is of Array[String] type
---c is of Array[String] type

var i=0
val joinedrdd = rdds1.join(rdds2)
val res= joinedrdd.map {
    case (a, (b, c)) => (
    //for (i <- 0 until (b.length - 1)){
        if (b(i).toString != c(i).toString)
        {(a, b(i), c(i))}
    //}
    )
}

1 个答案:

答案 0 :(得分:1)

我可能还有其他更有效的方法。但是,如果它们不同,我会zip内部Arraymap这些值,如果是这样,则替换返回的值,否则返回值。

jrdd.map {
  case (id, (xs, ys)) => (id, xs.zip(ys).map {
    case (x, y) if x == y => x // if x = y return x or y
    case _ => "random" // if they differ then return random
  })
}

你可以看到/测试我做的here