我有一个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 {
}
}
我如何实现这一目标?
答案 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
方便地为每个键只保留一个条目。