Сравните два rdd и значения, соответствующие правому rdd, поместите его в rdd

У меня 2

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

Сравните два rdd и один раз, которые совпадают с идентификатором, будет обновлено значение от rdd2 до rdd1. Я понимаю, что rdd неизменны, поэтому я считаю, что новый rdd будет создан. Выходной rdd будет выглядеть примерно так

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

Это базовая вещь, но я новичок в разжигании и скала и пробовать вещи.

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)) 
}
Другие вопросы по тегам