海量数据的topk 问题
一般来说 对于解决数据的topk问题我们都是用hash+堆解决的
但是对于海量数据而言 可能存在内存不够用的问题
所以一般的思路是
分块统计+堆排序
用哈希分块,确保相同的数据被分到一块
用HashMap统计当前块内数据的频次
用一个全局的最小堆 来存数据
假如要得到top100
则初始化一个容量为100的最小堆
先无条件add100个元素进去 堆顶元素则为第100小的元素
若当前数据的频次>堆顶元素 则删除堆顶元素 插入该元素
否则放弃
当所有的文件都处理完后 堆内的元素则为最终的元素 依次弹出(顺序是Top100->Top1)