1. 程式人生 > >海量數據處理算法(top K問題)

海量數據處理算法(top K問題)

一行 歸並排序 註意 top 返回 詞語 top k 其中 hash

舉例

有一個1G大小的一個文件,裏面每一行是一個詞,詞的大小不超過16字節,內存限制大小是1M。返回頻數最高的100個詞。

思路

  • 首先把文件分開
  • 針對每個文件hash遍歷,統計每個詞語的頻率
  • 使用堆進行遍歷
  • 把堆歸並起來

具體的方案

1.分治:
順序讀文件中,對於每個詞c,取hash(c)%2000,然後按照該值存到2000個小文件中。這樣每個文件大概是500k左右。

註意:

如果其中的有的文件超過了1M大小,還可以按照類似的方法繼續往下分,直到分解得到的小文件的大小都不超過1M。

2.hash遍歷:
對每個小文件,用hash的方式統計每個文件中出現的詞以及相應的頻率

3.堆遍歷:
用 最小堆取出出現頻率最大的100個詞,並把100個詞及相應的頻率存入文件,這樣又得到了5000個文件。

4.歸並整合

下一步就是把這5000個文件進行歸並(類似與歸並排序)的過程了。

海量數據處理算法(top K問題)