有乙個1gb大小的檔案,檔案裡面每一行是乙個詞,每個詞的大小不超過16b,記憶體大小限制為1mb,要求返回頻數最高的100個詞。
由於檔案大小為1gb,而記憶體的大小只有1mb,因此不能一次把所有的詞讀入到記憶體中去處理,可以採用分治的方法進行處理:把乙個檔案分解為多個小的子檔案,從而保證每個檔案的大小都小於1mb,進而可以直接被讀取到記憶體中處理。
1、遍歷檔案,對遍歷到的每乙個詞,執行hash操作:hash(x)%2000,將結果為i的詞存放到檔案ai中,通過這個分解步驟,可以是每個子檔案的大小約為400kb左右,如果這個操作後的檔案大小超過1mb,那麼可以使用同樣的方法把檔案繼續進行分解下去,直到檔案的大小小於1mb為止。
2、統計出每個檔案**現頻率最高的100個詞。最簡單的就是使用字典來實現,具體方法為:遍歷檔案中的所有詞,對於遍歷到的詞,如果字典中不存在,則把這個詞存入到字典中(鍵為這個詞,值為1),如果這個詞已經在字典中,那麼把這個詞對應的值加一。遍歷後可以非常容易的找到出現頻率最高的100個詞。
3、上一步找出了每個檔案**現頻率最高的100個詞,這步可以通過維護乙個小頂堆來找出所有詞**現頻率最高的100個詞。遍歷第乙個檔案,把第乙個檔案中的出現頻率最高的100個詞構成乙個小頂堆。(如果第乙個檔案中詞的數目小於100,那麼可以繼續遍歷第二個檔案,直到構建好有100個節點的小頂堆為止)。繼續遍歷,如果遍歷到的詞的出現次數大於堆頂上詞的出現次數,那麼可以用新遍歷到的詞替換堆頂的詞,然後重新調整這個堆為小頂堆。當遍歷完所有的檔案後,這個小頂堆中的詞就是出現頻率最高的100個詞。當然這一步也可以採用類似歸併排序的方法把所有檔案**現次數最高的100個詞進行排序,最終找出出現次數最高的100個詞。
大資料面試題 如何從大量資料中找出高頻詞
問題描述 有乙個1gb大小的檔案,檔案裡面每一行是乙個詞,每個詞的大小不超過16b,記憶體大小限制為1mb,要求返回頻數最高的100個詞。分析 由於檔案大小為1gb,而記憶體的大小只有1mb,因此不能一次把所有的詞讀入到記憶體中去處理,可以採用分治的方法進行處理 把乙個檔案分解為多個小的子檔案,從而...
面試題之大量資料如何排序
例 現有一千萬手機號碼,說說你有什麼方法可以進行快速排序?對於這種題目,利用常規的排序方法 如插入排序,快速排序 自然是不能解決問題的!因此資料量太大。注意內部排序和外部排序的區別。排序演算法分為內部排序和外部排序 1 內部排序 指的是待排序記錄存放在計算機隨機儲存器 記憶體 中進行的排序過程 我們...
大資料面試題
海量資料面試題整理 1.給定a b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4g,讓你找出a b檔案共同的url?方案1 可以估計每個檔案安的大小為50g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。s 求每對小...