如何在海量數據中找出重複最多一個。數組
經過hash映射爲小文件分佈式
經過hash_map統計各個小文件重讀最多的並記錄次數url
對每一個小文件重複最多的進行創建大根堆spa
上億有重數據,統計最多前N個。日誌
內存存不下排序
經過hash映射爲小文件內存
經過hash_map統計各個小文件重讀最多的並記錄次數字符串
對每一個小文件重複最多的進行創建大根堆並重復N次取走堆頂並重建堆操做hash
內存存得下it
直接內存經過hash_map統計並建大根堆
重複N次取走堆頂並重建堆操做
海量日誌數據,提取出某日訪問百度次數最多的那個IP(同1)。
將IP % 1000映射到1000個小文件中
相同IP會被映射到同一個文件
不會出現累加和更大狀況
分1000次在內存處理小文件,獲得頻率最大IP(使用map統計)
對這1000個IP創建大根堆
1000w查詢串統計最熱門10個(同2)。
同上
1G的文件,裏面1行1個不超過16字節的詞。內存限制1M,返回頻數最高前100(同2)。
將單詞 % 5000存入5000小文件
平均各文件約200K
對超過1M的文件繼續分割直到小於200K
使用map統計各個詞出現的頻率
對5000詞使用堆排序或歸併排序
分佈在100臺電腦的海量數據,統計前十。
各數據只出如今一臺機器中
先在獨立機器獲得前十
若能夠放入內存直接堆排序
若不可全放入內存:哈希分塊 -> map統計 -> 歸總堆排
再將100臺計算機的TOP10組合起來堆排序
同一元素可同時出如今不一樣機器中
遍歷全部數據,從新hash取模,使同一個元素只出如今單獨的一臺電腦中,而後採用上面方法先統計每臺電腦TOP10再彙總起來
有10個1G文件,每行都是一個可重複用戶query,按query頻度排序。
順序讀取十個文件並採起哈希,將query寫入10個文件中
經過hash_map(query, count)統計每一個query出現次數,至少2G內存
經過獲得的hash_map中query和query_count,對query_count排序並將從新輸出到文件中,獲得已排序好的文件
對十個文件進行歸併排序(外排序)
A,B兩個文件各存放50億url,每一個爲64Byte,限制內存4G找出公共url。
對A和B兩個大文件,先經過url % 1000將數據映射到1000個文件中,單個文件大小約320M(咱們只須要檢查對應小文件A1 V B1......,不對應小文件不會有相同url)
經過hash_set統計,把A1的url存儲到hash_set中,再遍歷對應的B1小文件,檢查是否在hash_set中,若存在則寫入外存。重複循環處理對應的1000個對。
1000w有重字符串,對字符串去重。
先hash分爲多個文件
逐個文件檢查並插入set中
多個set取交集
100w個數字找出最大100個。
堆排序法
建大根堆,取走堆頂並重建堆,重複100次
快排法
使用快速排序劃分,若某次樞紐元在後10000時(具體狀況具體分析),對後10000數據排序後取前100
在2.5億數字中找出不重複的整數。
使用2-Bit位圖法,00表示不存在,01表示出現一次,10表示出現屢次,11無心義。這樣只須要1G內存。
或者hash劃分小文件,小文件使用hash_set檢查各個元素,獲得的。
如何在40億數字中快速判斷是否有某個數?