海量資料處理 一

2021-07-05 02:06:47 字數 1610 閱讀 9781

題目一

搜尋引擎會通過日誌檔案把使用者每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255位元組。

假設目前有一千萬個記錄(這些查詢串的重複度比較高,雖然總數是1千萬,但如果除去重複後,不超過3百萬個。乙個查詢串的重複度越高,說明查詢它的使用者越多,也就是越熱門。),請你統計最熱門的10個查詢串,要求使用的記憶體不能超過1g。

法一:1):首先1000萬個記錄,每個記錄255byte,共 10000000*255byte= 2.55g,顯然不能全部放入記憶體中,將這1000萬個記錄平均分到10個小檔案中,又因為3000000*255=0.75g,所以可以在記憶體中維護乙個長度為300萬的雜湊表(hash table);因此我們維護乙個key為檢索的字串值,value為該字串出現次數的hashtable,依次將小檔案放入記憶體中,然後從小檔案中讀取乙個查詢串,如果不在雜湊表中,那個加入該字串,並且將value值置為1;如果該字串在雜湊表中,那麼將對應次數值+1,最終我們可以在o(n)的時間複雜度完成對該海量資料的處理。

2):那麼接下來,尋找最熱門的10個查詢串;

維護乙個最小堆 ,遍歷n個數,把最先遍歷到的k個數存放到堆中,並調整成乙個最小堆,對於接下來的每個查詢串,將其查詢次數與堆頂串的查詢次數相比較,若是 < 關係,則不更新堆,若大於則將堆頂元素重置為該查詢串,並調整小根堆;當遍歷完所有查詢串,最後堆中的k個查詢串就是最熱門的10個查詢串。

題目二

法一:1)   首先最多可能有2的32次方個ip位址,也就是4g,記憶體裡可能裝不下,所以考慮將hash(ip)%1024,將ip位址對映到1024個檔案中,則相同ip肯定在同乙個檔案中;2)  這樣每個小檔案最多包含4m個ip位址,對於每個小檔案,以ip為key,ip出現的次數為value的雜湊表,同時記錄當前出現次數最多的那個ip位址;3)  這樣可以得到1024個小檔案中的出現次數最多的ip,然後再依據常規的排序演算法得到總體上出現次數最多的ip。

題目三

給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4g,讓你找出a、b檔案共同的url?

答:首先50億*64>>>>4g,所以要把a、b檔案都要分成小檔案,

遍歷檔案a,對每個url,求hash(url)%1024,將url對映到相應的小檔案中a0,a1,...a999 ;對檔案b,進行同樣的操作;這樣,操作完後,得到相應的小檔案b0,b1,b2,...,b999;

這樣處理後相同的url肯定在對應下標相同的小檔案中,然後我們只需要求出1000對小檔案中相同的url即可;

分別比對這1000個小檔案,可以通過先將a0中url對映到乙個hash表中,然後遍歷b0中url,判斷其是否在hash表中出現,若出現則為共同的url;以此類推,可以處理其他小檔案,從而找到a、b檔案中相同的url。

題目四:

5億個數找中位數(待)

答:首先將這些數字按照 val%10000000  對映到不同的檔案中 即f0(0—9999999) f1(10000000—19999999) f2(.....)....f49,並記錄每個檔案中數字的個數,f0 —f49的元素是按塊有序的,這樣很容易找到中位數字於哪個塊中,對該塊進行排序,就可以根據中位數字於該塊的哪個位置來找到它啦~~~~

海量資料處理 一

想法 1.hash對映 順序讀取10個檔案,按照hash ip 10的結果將資料寫入到另外10個檔案中。2.hash統計 依次對小檔案用hash map ip,ip count 來統計每個ip出現的次數。3.堆 快速 歸併排序 利用快速 堆 歸併排序按照出現次數進行排序,將排序好的ip和對應的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...