十個海量資料處理方法大總結

2021-07-09 10:25:02 字數 2035 閱讀 3043

拓展 d-left hashing中的d是多個的意思,我們先簡化這個問題,看一看2-left hashing。2-left hashing指的是將乙個雜湊表分成長度相等的兩半,分別叫做t1和t2,給t1和t2分別配備乙個雜湊函式,h1和h2。在儲存乙個新的key時,同時用兩個雜湊函式進行計算,得出兩個位址h1[key]和h2[key]。這時需要檢查t1中的h1[key]位置和t2中的h2[key]位置,哪乙個位置已經儲存的(有碰撞的)key比較多,然後將新key儲存在負載少的位置。如果兩邊一樣多,比如兩個位置都為空或者都儲存了乙個key,就把新key儲存在左邊的t1子表中,2-left也由此而來。在查詢乙個key時,必須進行兩次hash,同時查詢兩個位置。

(其實本質上就是【分而治之】的思想,重在「分」的技巧上!)

以英文為例,下面是要被索引的文字:

t0 = "it is what it is"

t1 = "what is it"

t2 = "it is a banana"

我們就能得到下面的反向檔案索引:

"a":      

"banana":

"is":

"it":

"what":

檢索的條件」what」,」is」和」it」將對應集合的交集。

正向索引開發出來用來儲存每個文件的單詞的列表。正向索引的查詢往往滿足每個文件有序頻繁的全文查詢和每個單詞在校驗文件中的驗證這樣的查詢。在正向索引中,文件佔據了中心的位置,每個文件指向了乙個它所包含的索引項的序列。也就是說文件指向了它包含的那些單詞,而反向索引則是單詞指向了包含它的文件,很容易看到這個反向的關係。

上千萬or億資料(有重複),統計其中出現次數最多的前n個資料,分兩種情況:可一次讀入記憶體,不可一次讀入。

可用思路:trie樹+堆,資料庫索引,劃分子集分別統計,hash,分布式計算,近似統計,外排序

所謂的是否能一次讀入記憶體,實際上應該指去除重複後的資料量。如果去重後資料可以放入記憶體,我們可以為資料建立字典,比如通過 map,hashmap,trie,然後直接進行統計即可。當然在更新每條資料的出現次數的時候,我們可以利用乙個堆來維護出現次數最多的前n個資料,當然這樣導致維護次數增加,不如完全統計後在求前n大效率高。

如果資料無法放入記憶體。一方面我們可以考慮上面的字典方法能否被改進以適應這種情形,可以做的改變就是將字典存放到硬碟上,而不是記憶體,這可以參考資料庫的儲存方法。

當然還有更好的方法,就是可以採用分布式計算,基本上就是map-reduce過程,首先可以根據資料值或者把資料hash(md5)後的值,將資料按照範圍劃分到不同的機子,最好可以讓資料劃分後可以一次讀入記憶體,這樣不同的機子負責處理各種的數值範圍,實際上就是map。得到結果後,各個機子只需拿出各自的出現次數最多的前n個資料,然後彙總,選出所有的資料中出現次數最多的前n個資料,這實際上就是reduce過程。

實際上可能想直接將資料均分到不同的機子上進行處理,這樣是無法得到正確的解的。因為乙個資料可能被均分到不同的機子上,而另乙個則可能完全聚集到乙個機子上,同時還可能存在具有相同數目的資料。比如我們要找出現次數最多的前100個,我們將1000萬的資料分布到10臺機器上,找到每台出現次數最多的前 100個,歸併之後這樣不能保證找到真正的第100個,因為比如出現次數最多的第100個可能有1萬個,但是它被分到了10臺機子,這樣在每台上只有1千個,假設這些機子排名在1000個之前的那些都是單獨分布在一台機子上的,比如有1001個,這樣本來具有1萬個的這個就會被淘汰,即使我們讓每台機子選出出現次數最多的1000個再歸併,仍然會出錯,因為可能存在大量個數為1001個的發生聚集。因此不能將資料隨便均分到不同機子上,而是要根據hash 後的值將它們對映到不同的機子上處理,讓不同的機器處理乙個數值範圍。

而外排序的方法會消耗大量的io,效率不會很高。而上面的分布式方法,也可以用於單機版本,也就是將總的資料根據值的範圍,劃分成多個不同的子檔案,然後逐個處理。處理完畢之後再對這些單詞的及其出現頻率進行乙個歸併。實際上就可以利用乙個外排序的歸併過程。

另外還可以考慮近似計算,也就是我們可以通過結合自然語言屬性,只將那些真正實際中出現最多的那些詞作為乙個字典,使得這個規模可以放入記憶體。

海量資料處理 十道面試題與十個海量資料處理方法總結

第一部分 十道海量資料處理面試題 或者如下闡述 雪域之鷹 演算法思想 分而治之 hash 1.ip位址最多有2 32 4g種取值情況,所以不能完全載入到記憶體中處理 2.可以考慮採用 分而治之 的思想,按照ip位址的hash ip 24值,把海量ip日誌分別儲存到1024個小檔案中。這樣,每個小檔案...

海量資料處理方法總結

適用範圍 第k大,中位數,不重複或重複的數字 基本原理及要點 因為元素範圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定範圍,然後最後在乙個可以接受的範圍內進行。可以通過多次縮小,雙層只是乙個例子。擴充套件 問題例項 1 2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個...

海量資料處理分析總結

海量的資料處理問題,對其進行處理是一項艱鉅而複雜的任務。原因有以下幾個方面 一 資料量過大,資料中什麼情況都可能存在。如果說有10條資料,那麼大不了每條去逐一檢查,人為處理,如果有上百條資料,也可以考慮,如果資料上到千萬級別,甚至過億,那不是手工能解決的了,必須通過工具或者程式進行處理,尤其海量的資...