Spark数据倾斜解决方案三:随机key双重聚合

什么是随机key双重聚合

随机Key双重聚合是指Spark分布式计算对RDD调用reduceByKey等聚合类Shuffle算子进行计算,使用对Key值随机数前缀的处理技巧,对Key值进行二次聚合。

  • 第一次聚合(局部聚合):对每个Key值加上一个随机数,执行第一次reduceByKey聚合操作。
  • 第二次聚合(双重聚合):去掉Key值的前缀随机数,执行第二次reduceByKey聚合,最终得到全局聚合的结果。

适用场景

对RDD执行reduceByKey等聚合类shuffle算子或者在Spark SQL中使用group by语句进行分组聚合。

案例:电商广告点击系统中,如果根据用户点击的省份进行汇聚,原来的Key值是省份,如果某些省份的Value值特别多,发生了数据倾斜,可以将每个Key拆分成多个Key,加上随机数前缀将Key值打散,组拼成random_省份的新的Key值,调用reduceByKey做局部聚合,然后再将random_前缀去掉,形成的Key值仍为省份,再调用reduceByKey,进行全局聚合。

实现思路

这个方案的核心实现思路就是进行两阶段聚合。第一次是局部聚合,先给每个key都打上一个随机数,比如10以内的随机数,此时原先一样的key就变成不一样的了,比如(hello, 1) (hello, 1) (hello,

你可能感兴趣的:(Spark最佳实战与性能优化,spark,大数据,数据倾斜,随机key,双重聚合)