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个文件进行归并(类似与归并排序)的过程了。

  • 相关阅读:
    springboot(6)-热部署
    springboot(5)-文件上传
    ubuntu修改tomcat使用的jdk
    jstack使用
    HeapAnalyzer如何使用
    查看linux下tomcat使用的jdk版本
    ubuntu-tomcat安装目录
    vi命令
    211java-jdk安装记录
    linux的java安装目录
  • 原文地址:https://www.cnblogs.com/foxy/p/9295580.html
Copyright © 2011-2022 走看看