大資料檔案處理
1.給定一個大小超過100G的檔案,其中存在IP地址,找到其中出現次數最多的地址。
我們要對檔案進行雜湊切分:也就是利用雜湊函式的思想,對檔案中的IP做%1000計算 ,
將餘數為0~999的結果(以鍵值對的方式)分別輸出到0~999號檔案中。(每個檔案的平均大小大約是100M左右)
找出每個檔案中出現次數最多的IP,再次進行比較得到最大的IP值。
注:作業系統可以依次讀取硬碟中的100G檔案。
2.給定100億個整數,找出只出現一次的整數。
我們用點陣圖變形的方式來解決這個問題。用兩個位元位來表示一個整數,第一個位元位表示該位元位是該整數否出現了多次,第二個位元位表示是該整數否出現了一次。
即:11表示出現了多次, 01表示出現了一次 ,00表示一次都未出現 。
整數的大小為2^32, 我們用兩個位元位來表示,則一共需要2^33個位元位,也就是1G的記憶體。
我們建立1G記憶體的點陣圖,將100億個整數逐個插入到點陣圖中,然後遍歷點陣圖
(建立count=0計數器,每次檢查移動兩位、並且count++,檢查值是否為01,如果為01就輸出count到指定檔案中。 )
即得到所有隻出現一次整數的集合。
3.有兩個檔案分別有100億個字串,只有1G記憶體,找到兩個檔案的交集。
我們要利用 雜湊檔案切分 和 布隆過濾器的思想。
對第一個檔案中的每個字串進行 雜湊函式 (2個或者多個)計算,將兩個計算結果相加後%100的餘數為0~99的結果輸出到0~99 個檔案中。
對第二個檔案也進行相應的操作。
對這100個小檔案進行,去掉只出現一次的資料,然後資料去重就得到了交集(資料庫有相關的函式呼叫),然後再將處理後的結果合併為一個檔案。
4.給上千個檔案,每個檔案的大小為1k~100M,設計演算法找出某個詞在哪些檔案中。
我們採用倒排索引的方式。
逐個遍歷這1000個檔案,對每個檔案中出現的所有詞語進行製表,即將單詞進行雜湊計算,建立雜湊桶。(假設記憶體足夠)
同一個檔案中相同的單詞只記錄一次。 這樣在遍歷完成所有的檔案後,我們就可以對一個新的單詞進行雜湊計算,然後再雜湊桶中查詢它在哪些檔案中出現過。