2017-03-01 100 views
2

我是scala新手。我有以下類型的兩個RDD:減去兩個RDD在Spark/Scala中包含List As Value的值

RDD [(長,列表[龍])]

我想從兩個RDD減去內部列表[龍]值。

例如:

rddPair1包含:

((4,List(5)), (1,List(2)), (2,List(4, 3, 4)), (3,List(6, 4))) 

rddPair2包含:

((5,List(6)), (2,List(3)), (3,List(4))) 

我想要得到的RDD類似下面:

(4,List(5)), (1,List(2)), (2,List(4, 4)), (3,List(6)) 

你可以在這裏檢查2,3鍵匹配和此鍵rddPair2的列表值從rddPair1的值中減去。

在此先感謝

回答

3

您可以使用leftOuterJoin然後將結果映射到獲得所需的格式:

val result: RDD[(Int, List[Int])] = rddPair1.leftOuterJoin(rddPair2).mapValues { 
    case (l1, Some(l2)) => l1.diff(l2) // match found - remove l2 from l1 
    case (l1, None) => l1    // no match - keep l1 as is 
} 
+0

非常感謝@Tzach瑣。對我和其他人來說這非常有用。 –