有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复
的URL。
补充问题: 某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种求出每天热门Top100的可行办法。
解题前首先要明确,资源上的限制,包括内存、计算时间等要求。
原问题:
① 将100亿的大文件通过哈希函数分配到100台机器上,哈希函数的性质
决定了同一条URL不可能分给不同的机器;
② 然后每一台机器分别统计给自己的URL中是否有重复的URL,(或者在
单机上将大文件通过哈希函数拆成1000个小文件,对每一个小文件再进行
哈希表遍历),找出重复的URL;
③ 还可以在分给机器或拆完文件之后进行排序找重复URL,排序过后看是
否有重复的URL出现。
补充问题:
- 哈希分流。首先把包含百亿数据量的词汇文件分流到不同机器上;
如果每一台机器上分到的数据量依然很大,再用哈希函数把每台机器
的分流文件拆成更小文件处理; - 处理每一个小文件时,通过哈希表做一个词频统计,哈希表记录完成
后;再遍历哈希表,过程中用大小为100的小根堆来选出每一个小文件
的 Top100(未排序); - 将小文件的 Top100的小根堆按照词频排序;把每个小文件进行排序后
的Top100进行外排序或者利用小根堆,选出每台机器上的Top100; - 不同机器之间的Top100再进行外排序或者利用小根堆,最终求出整个
百亿数据量中的Top100。