zoukankan      html  css  js  c++  java
  • 海量数据处理算法(top K问题)

    举例

    有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

    思路

    • 首先把文件分开
    • 针对每个文件hash遍历,统计每个词语的频率
    • 使用堆进行遍历
    • 把堆归并起来

    具体的方案

    1.分治: 
    顺序读文件中,对于每个词c,取hash(c)%2000,然后按照该值存到2000个小文件中。这样每个文件大概是500k左右。

    注意:

    如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过1M。

    2.hash遍历: 
    对每个小文件,用hash的方式统计每个文件中出现的词以及相应的频率

    3.堆遍历: 
    用 最小堆取出出现频率最大的100个词,并把100个词及相应的频率存入文件,这样又得到了5000个文件。

    4.归并整合

    下一步就是把这5000个文件进行归并(类似与归并排序)的过程了。

  • 相关阅读:
    数组的学习(一)
    Servlet是线程安全吗?
    MySql用户管理:添加用户、授权、删除用户
    泛型(二)
    泛型(一)
    Spring MVC
    spring框架
    mybatis基础
    Hibernate 基础
    Java局部类
  • 原文地址:https://www.cnblogs.com/foxy/p/9295580.html
Copyright © 2011-2022 走看看