Spark如何优化键值对的RE编码

时间:2015-03-11 17:44:20

标签: scala apache-spark

我的问题是对键值对进行编码,使得所有值都是从0开始的连续整数。

数据之前重新编码:

  

10 - > 11

     

15 - > 12

     

13 - > 10

     

18 - > 20

     

10 - > 15

     

15 - > 11

重新编码后的数据

  

10 - > 0

     

15 - > 1

     

13 - > 2

     

18 - > 3

     

10 - > 4

     

15 - > 0

以下是我实现此目的的方法:

val encoding = data.map(_.swap).groupByKey().zipWithIndex.map(x => (x._1._1, x._2))
val data_new = data.map(_.swap).join(encoding).map(x => (x._2._1, x._2._2.toInt))

但我的实施非常,我想知道是否有更好的方法来解决这个问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您需要的只是关注,

假设dataRDD[ ( Int, Int ) ]key-value元组。

val newData = data
  .groupBy( { case ( key, value ) => value } )
  .zipWithIndex
  .sortBy( { case ( ( value, iter ), index ) => index } )
  .flatMap( { case ( ( value, iter ), index ) => {
    iter.map( { case ( key, value ) => ( key, index ) } ) 
  } } )