在分布式应用中,有时候需要把一些东西,例如cookie,编码成int/long型数字,在这里提供一些思路。
1. 集中式编码
类似于单机,将所有cookie重新切分在一起,按次序编码
var idnum:Long = 0
idrdd.repartition(1).map(oriId => {
idnum += 1
(oriId, idnum)
}).repartition(partitionNum)
这种方法在数据量比较大的时候非常慢
2. 固定间隔分布式编码
每个partition内部实现顺序编码,各partition之间预留一定的间隔,需要预估每个partition容纳的最大数量,例如我们如果估计每个partition中的数量不会超过100万,则
idrdd.mapPartitionsWithIndex((mapIndex, itemIter) => {
var baseIndex: L