哈希切割

哈希切割:

给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 与上题条件相同,如何找到top K的IP?如何直接用Linux系统命令实现?

答:

哈希切割就是将一个大文件,利用哈希的原理,将其分为若干个小文件。相同的数据都被分到同一个文件里。例如有一个存放着100亿个整数的大文件,将其分为100个小文件。将每个数都模100,结果相同的数存放到一个文件里。因为相同的数模100的结果是一样的。

1.找到出现次数最多的IP地址:

Hash分桶法
• 将100G文件分成1000份,将每个IP地址映射到相应文件中:IPINT % 1000
• 在每个文件中分别求出最高频的IP,再合并 Hash分桶法:
• 使用Hash分桶法把数据分发到不同文件
• 各个文件分别统计Top K
• 最后Top K汇总

2.如何找到top K的IP:

建立一个小堆,通过比较来找。
在这里插入图片描述
在这里插入图片描述

3.用Linux系统命令实现:

假设top 10:
sort log_file | uniq -c | sort -nr k1,1 | head -10

发布了37 篇原创文章 · 获赞 3 · 访问量 1104

猜你喜欢

转载自blog.csdn.net/weixin_43264873/article/details/102980358
今日推荐