海量資料處理

2021-10-24 01:15:36 字數 1900 閱讀 9181

給 40億個 不重複的無符號整數, 沒排過序. 給乙個無符號整數, 如何快速判斷 乙個數是否在這40億個數中存在.

1位圖: 就是用每一位來存放某種狀態, 適用於海量資料, 資料無重複的場景. 通常是用來 判斷某個資料存不存在.

(1) 建立 byte 型別的陣列, 由於是海量資料, 40億*1bit 占用的記憶體不大, 可以在記憶體中執行.

(2) 原來的每個數通過 先除8後余8的方式,

找到具體的位置, 把該位置置為1.

(3) 判斷乙個數, 先通過除8後余8找到在位圖中的位置, 然後看該位置的值 為1就是存在, 為0就是不存在.

點陣圖的應用.

(1)給定100億 個整數, 找出只出現了一次的整數.

(1)設計兩個位圖,同上. 如果乙個數第一次出現了, 就把 b相應的位置設為1.

(2) 如果乙個數第二次出現了, 就把 a相應的位置設為1.

(3)0 0 表示乙個數 沒有出現過. 1 1 分別表示乙個數 出現了2次或以上.

(4)0 1表示乙個數隻出現了一次. (也可以把**設計成 1 0 的情況).

(2)兩個檔案 分別有100億個整數, 我們只有1g 記憶體, 如何找到兩者交集.

1 1 情況即為兩者的交集 (既在a**現, 也在b**現).

2布隆過濾器: 可以用來判斷某個資料存不存在, 是雜湊表和位圖的結合. (提高查詢效率, 節省大量的記憶體空間)

通過設計 多個雜湊函式, 然後計算. a和b在集合中(所有位置的值都置為1), c和d不在集合中(只要有乙個位置的為0就是不存在).

存在極小概率的假陽性:d通過計算所有位置的值都為1, 被誤判在集合中, 可以通過增加雜湊函式的個數減少假陽性的概率.

3海量資料找到出現次數最多的元素. 5tb的訪問日誌, 找到出現次數最多的 ip.

(1)按照雜湊分組, 然後統計 每組出現次數最多的元素, 然後進行比較.

(2)進行比較. 關鍵在於雜湊函式的設計.

4海量資料 + topk問題. 5tb的訪問日誌, 找到出現次數 最多的10個ip.

(1)按照雜湊分組, 並統計出 每個組每個ip出現的次數.

(2) 每個組分別用優先順序佇列建立最小堆(堆中儲存10個元素),找出 該組 出現次數最多的10個元素.

(3)取出並比較這些組的元素, 找到 top10 的ip.

海量資料處理

1 有一千萬條簡訊,有重複,以文字檔案的形式儲存,一行一條,有 重複。請用5分鐘時間,找出重複出現最多的前10條。方法1 可以用雜湊表的方法對1千萬條分成若干組進行邊掃瞄邊建雜湊表。第一次掃瞄,取首位元組,尾位元組,中間隨便兩位元組作為hash code,插入到hash table中。並記錄其位址和...

海量資料處理

給定a b兩個檔案,各存放50億個url,每個url各占用64位元組,記憶體限制是4g,如何找出a b檔案共同的url?答案 可以估計每個檔案的大小為5g 64 300g,遠大於4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。遍歷檔案a,對每個url求取hash url 1000...

海量資料處理

分而治之 hash對映 hash統計 堆 快速 歸併排序 300萬個查詢字串中統計最熱門的10個查詢。針對此類典型的top k問題,採取的對策往往是 hashmap 堆。hash統計 先對這批海量資料預處理。具體方法是 維護乙個key為query字串,value為該query出現次數的hashtab...