将ZipWithIndex应用于键值对的RDD

时间:2015-08-09 14:13:28

标签: apache-spark

我有一个像RDD[Int,String]这样的键值对的RDD,我想为每个键应用zipWithIndex。有没有办法做到这一点?

例如,如果我有一个像

这样的kvPairs的RDD
(0,10),(0,20),(0,30),(0,40),(1,11),(1,21),(1,31),(1,41) ...

我希望输出像

((0,10),1),((0,20),2),((0,30),3),((0,40),4),
((1,11),1),((1,21),2),((1,31),3),((1,41),4) ...

RDD可以具有任何键值组合。首先,我想要应用sortByKey,然后再应用zipWithIndex

谢谢!

1 个答案:

答案 0 :(得分:1)

这样的东西?

rdd
  .groupByKey
  .flatMap{case (k, vs) => 
     vs
       .toList
       .sortBy(_.toInt) // Assuming this is expected order
       .zipWithIndex
       .map{case (v, i) => ((k, v), i + 1)}
  }