何实现在上亿条的用户搜索日志中找到Top100的关键词

用户搜索的的日志每天量非常的大,如果将这些搜索的日志直接加载到内存中做分析是不可取的,因为内存是支撑不住的,我们可以采用“分而治之”的思想来处理这个问题,如下所示的处理流程图:

(1)将用户搜索的日志文件(一个大文件)切割成若干个小文件(如设置每个小文件大小为512KB)

(2)创建一个长度为n(如2048)的哈希表数组,用来统计每个小文件中关键词出现的频率。服务端开启多线程并行遍历大文件切割出来的小文件,然后对每个用户搜索的关键词进行哈希取模运算,通过计算的结果将关键词统计到哈希表数组中。

(3)最后要遍历哈希表数组,使用小顶堆来帮助我们实现获取用户搜索Top 100的关键词。

首先构建一个小顶堆,设置堆大小为100,然后在哈希表中遍历到的关键词出现的次数大于堆顶关键词出现的次数,那么就用新关键词替换堆顶的关键词并重新调整为小顶堆,如下所示的小顶堆图:

哈希表之后,小顶堆中的关键词就是出现频率最高的100个关键词。

总结:

(1)使用“分而治之”的思想,将大文件分割为小文件(可以使用哈希取模法切割文件)。

(2)使用多线程遍历每个小文件,统计关键词的出现频率。

(3)使用小顶堆(小顶堆适用于解决统计频率最高的TopN的问题)统计前x位的关键词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值