我的问题是对键值对进行编码,使得所有值都是从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))
但我的实施非常慢,我想知道是否有更好的方法来解决这个问题。
谢谢!
答案 0 :(得分:0)
我认为您需要的只是关注,
假设data
是RDD[ ( 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 ) } )
} } )