比较两个rdd和从右边的rdd匹配的值将它放在rdd中

时间:2016-04-23 15:58:58

标签: scala apache-spark rdd

我有2 rdd

rdd1       rdd2
1,abc      3,asd
2,edc      4,qwe 
3,wer      5,axc
4,ert
5,tyu
6,sdf
7,ghj

比较两个rdd,一旦匹配id,将使用rdd2到rdd1的值进行更新。 我知道rdd是不可变的所以我认为新的rdd将被制作。 输出rdd看起来像这样

output rdd       
    1,abc      
    2,edc       
    3,asd      
    4,qwe
    5,axc
    6,sdf
    7,ghj

这是一个基本的东西,但是,我是新手来点火和尝试。

1 个答案:

答案 0 :(得分:1)

使用leftOuterJoin按键匹配两个RDD,然后使用map选择“新值”(来自rdd2)(如果存在),否则保留“旧值” :

// sample data:
val rdd1 = sc.parallelize(Seq((1, "aaa"), (2, "bbb"), (3, "ccc")))
val rdd2 = sc.parallelize(Seq((3, "333"), (4, "444"), (5, "555")))

val result = rdd1.leftOuterJoin(rdd2).map { 
  case (key, (oldV, maybeNewV)) => (key, maybeNewV.getOrElse(oldV)) 
}