經典演算法-海量資料處理演算法(top K問題)

jamesehng發表於2016-12-08

舉例

有一個1G大小的一個檔案,裡面每一行是一個詞,詞的大小不超過16位元組,記憶體限制大小是1M。返回頻數最高的100個詞。

思路

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

具體的方案

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

注意:

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

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

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

4.歸併整合

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

相關文章