算法系列-大数据面试题-在超大文件中找出访问百度次数最多的IP
现有海量日志数据保存在一个超级大的文件中,该文件无法直接读入内存,要求从中提取某天出访问百度次数最多的那个IP
(1)面试中若题目提到大文件等,其实就是告诉你数据量大,不能一次性加载到内存中,而实际中我们就需要估算。既然是要对访问百度次数的ip做统计,我们最好先预处理一下,遍历把访问百度的所有ip写到另一个文件a中
(2)ip用32位表示,所以最多有2^32个不同ip地址。同样的,当内存不能一次性加载数据时,我们就需要考虑分治法。
step1:采用hash映射(hash(ip)%1000)分别把结果保存到小文件a0....a999中。有人可能会问,这里一定要用1000吗?当然不一定,需要估算,比如若文件a总共320G远远大于4G内存,我们就需要分块(hash映射),若分为1000块,则每块大约300M,再读入内存就没问题了。
step2:可以采用hash_map进行频率统计,找出每个小文件中出现频率最大的IP。对于每一个小文件ai,具体操作如下:创建hash_map,遍历小文件中每条记录。对于每条记录,先在hash_map中搜索,若有,将hash_map中记录count+1,若没有,插入hash_map
step3:在这1000个最大的IP中,找出count最大的ip
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: 算法系列-大数据面试题-大文件中返回频数最高的100个词
- 下一篇:没有了