删除scala中int对向量中的重复映射

时间:2015-12-09 05:43:25

标签: scala apache-spark

我有一个RDD[((Int, Int), Vector[(Long, Long)])]形式的RDD。在这里,我需要操作Vector部分并删除那里的任何重复映射。 例如,在Vector部分,如果有两对(3,2)和(3,4)则 只保留(3,2)(任何一个)。

完整的示例将是

((1,1),Vector((3,3), (1,1), (1,2), (2,1), (2,2), (4,4)))
((5,2),Vector((4,3), (4,2), (2,1)))
((5,2),Vector((4,3), (1,2)))

应该成为

((1,1),Vector((3,3), (1,1), ,(2,1), (4,4)))
((5,2),Vector((4,3), (2,1)))
((5,2),Vector((4,3), (1,2)))

我从这样的事情开始,但卡住了。

curRDD.map{ case (left, right) => 
for((ll,li) <- right) yield {

}
}

我如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

这是一个使用一系列转换而不是for-comprehension的实现。对的顺序可以不同。这会是一个问题吗?

curRDD.map{ x => (x._1, x._2.groupBy(_._1).mapValues(_.head).values.toVector ) }

答案 1 :(得分:1)

currRdd.map{case(left,right)=>(left, right.toMap.toVector)}

.toMap方便地为每个键只保留一个条目。