2015-08-09 50 views
0

我有一個類似於RDD[Int,String]的鍵值對的RDD,我想爲每個鍵應用zipWithIndex。有沒有辦法做到這一點?在鍵值對的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

這樣的事情?

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