2017-03-01 99 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琐。对我和其他人来说这非常有用。 –