海量資料處理

2021-08-18 02:34:23 字數 1219 閱讀 5603

預備知識

在解決大資料問題前,我們先準備一些基礎知識:

1g=1073741824byte 大約等於10億位元組

大資料問題思路:

1.特殊的資料結構能否解決

2.切分–>雜湊切分(相同進乙個) 切分次數最好大,這樣平均每份小

常見問題

1)給乙個超過100g大小的log file,log中存著ip位址,設計演算法找到出現次數最到的ip位址

演算法思想:分而治之+hash

先雜湊切分成1000份檔案,每份平均是100m,相同的ip會進入同乙個檔案編號,定義乙個max變數存放出現次數最多的,初值為0,在查的時候,把每乙個檔案存到map中,找出map中最大的,然後和max比較,比max大就賦值給max,之後繼續遍歷剩下的999個檔案

2)給兩個檔案,分別有100億個query, 我們只有1g記憶體,如何找到兩個檔案交集?分別給出精確演算法和近似演算法

精確演算法:100億個query,乙個query大約60位元組,100億大約600g,雜湊切分上1200份,不要切600份雜湊且不均勻,相同查詢會進入編號相同的檔案,把a檔案的1200份檔案分別依次放到set,然後b檔案去看在不在

近似演算法:

如果要得到近似結果的話可以使用布隆過濾器,將其中乙個檔案的內容對映到位圖中,然後再用另乙個檔案中的內容到這個點陣圖中尋找。

3)給定100億個整數,設計演算法找到只出現一次的整數!

兩種解法:

1.用位圖變形,用兩個位,因為這些數有可能出現0次、1次、多次,只用乙個bit位是無法表示的,所以我們需要用兩個bit位來表示乙個整數的存在狀態即:00表示沒出現,01表示只出現1次,10(或11)表示出現多次

2.分而治之+hash

4)給兩個檔案,分別有100億個整數,我們只有1g記憶體,如何找到兩個⽂件交集!

1.100億個整數大約是40g,分別雜湊切分100份,然後進行分別對比

2.將乙個檔案中的資料對映到位圖中(大約需要500m),然後再用第二個檔案中的資料到位圖中去尋找。這種方法的時間複雜度是o(n)。

5)1個檔案有100億個int, 1g記憶體,設計演算法找到出現次數不超過2次的所有整數!

用位圖變形,用兩個位,因為這些數有可能出現0次、1次、多次,只用乙個bit位是無法表示的,所以我們需要用兩個bit位來表示乙個整數的存在狀態即:00表示沒出現,01表示只出現1次,10(或11)表示出現多次

海量資料處理

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...