1. 程式人生 > >大資料檔案處理

大資料檔案處理

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個檔案,對每個檔案中出現的所有詞語進行製表,即將單詞進行雜湊計算,建立雜湊桶。(假設記憶體足夠)

同一個檔案中相同的單詞只記錄一次。 這樣在遍歷完成所有的檔案後,我們就可以對一個新的單詞進行雜湊計算,然後再雜湊桶中查詢它在哪些檔案中出現過。