使用“二次聚合”的思想
1.离线数据
Hive 、MR、 SPARK
1.1 场景描述
以MR为例,目前有p1 和 p2 两个分区, p1分区内有1亿条数据,key值为a ,p2分区内有一万条数据,key值为b
1.2 解决思路
以SQL为例
首先,为key加上随机数,进行一次分区,
(
select
聚合函数,如count*
from
group by key+随机数
) t1
然后在上面SQL的基础上进行二次分区
select
聚合函数
from t1
group by key去掉随机数
2.实时数据
使用Flink直接调用rebalance()算子或rescale()算子
rebalance算子会将各个分区内的数据打散再分区,rescale算子功能和rebalance算子相同,但效率更高