海量資料處理
給一個超過100G大小的log file, log中存著IP地址, 設計演算法找到出現次數最多的IP地址?
思路:首先100G大小的檔案,計算機記憶體無法儲存,所以我們解決問題首先不能考慮把檔案放在記憶體中在去遍歷統計次數。但是我們可以資料結構中的雜湊表來處理。
1)切割檔案:將100G的大檔案檔案分割為1000份(分多少份取決你處理檔案的大小)。
2)計算ip的位置:ip是字串,我們通過字串雜湊函式可以計算出每個IP對應的index(index = Hashfunc(ip)%1000)。
3)統計ip出現的次數:利用key (ip)—value(ip出現的次數)模型去統計每個ip出現的次數。
4)找出次數最多的ip:遍歷每個小檔案,找出最大的value值,即為出現做多的次數。
圖解過程如下:
給定100億個整數,設計演算法找到只出現一次的整數
思路:整數是4個位元組,100億個整數所佔記憶體大約是40G,所以無法直接對100億個整數進行統計。有個資料結構叫點陣圖(雜湊表的變形),利用他便可以解決這個問題。
當然這裡必須對點陣圖進行處理,如果對映到該位置為0,則將該位置置1,如果對映到該位置為1,則置0。最後位元位為1的數,即為出現一次的數。
當然此題也可以用雜湊表解決,思路與上題相同。
點陣圖節省空間,雜湊表則會花費大量空間。
給兩個檔案,分別有100億個整數,我們只有1G記憶體,如何找到兩個檔案交集
思路:這道題也是不能直接操作,必須藉助點陣圖來處理。(100億整數估算要花費40G,題目給出的記憶體是1G)。
利用點陣圖可以只需要開闢整數的最大範圍個位元位(大約是500M)。
1)將一個檔案中所有整數對映到點陣圖。
2)遍歷第二個檔案再次對映到點陣圖,如果對映位置為1則置0,對映位置為0則置1,最後取反。取反後為1的位置既是兩個檔案交際。
1個檔案有100億個int,1G記憶體,設計演算法找到出現次數不超過2次的所有整數
思路:同樣利用點陣圖,這裡要對點陣圖做處理,用兩個點陣圖進行計數,00出現0次,01出現一次,10出現兩次,大於兩次用11記錄。
1)對映所有整數到點陣圖。
2)遍歷點陣圖,出現01則為需要找的整數。
給兩個檔案,分別有100億個query,我們只有1G記憶體,如何找到兩個檔案交集?分別給出精確演算法和近似演算法
思路:假設每個query為10個位元組,100億個query則為100 * 10 個位元組。估算需要100G記憶體,兩個檔案需要200G記憶體,題目只有1G記憶體。
近似演算法用布隆過濾器,步驟與上題求交集方法一樣。
精確演算法:
估算:100億個位元組大約需要10G的記憶體,假設每個query所佔10個Bite,100億個query就需要100G的記憶體,顯然計算機是存不下的
這裡找交集,我們可以考慮使用雜湊分割,具體做法如下:
1)將兩個檔案分別分成1000份的小檔案,將問題轉化為求這兩個小檔案劃分出來的每個小檔案的交集
2)將每個小檔案的交集求出,整合成兩個檔案的交集
如何擴充套件BloomFilter使得它支援刪除元素的操作 如何擴充套件BloomFilter使得它支援計數操作
基本的布隆過濾器不支援刪除(Deletion)操作,但是 Counting filters 提供了一種可以不用重新構建布隆過濾器但卻支援元素刪除操作的方法。在Counting filters中原來的位陣列中的每一位由 bit 擴充套件為 n-bit 計數器,實際上,基本的布隆過濾器可以看作是隻有一位的計數器的Counting filters。原來的插入操作也被擴充套件為把 n-bit 的位計數器加1,查詢操作即檢查位陣列非零即可,而刪除操作定義為把位陣列的相應位減1,但是該方法也有位的算術溢位問題,即某一位在多次刪除操作後可能變成負值,所以位陣列大小 m 需要充分大。另外一個問題是Counting filters不具備伸縮性,由於Counting filters不能擴充套件,所以需要儲存的最大的元素個數需要提前知道。否則一旦插入的元素個數超過了位陣列的容量,false positive的發生概率將會急劇增加。當然也有人提出了一種基於 D-left Hash 方法實現支援刪除操作的布隆過濾器,同時空間效率也比Counting filters高。
相關文章
- 海量資料處理2
- 海量資料處理 (轉)
- 海量資料處理_批量插入
- 海量資料處理_批量更新
- 海量資料的併發處理
- 海量資料處理_表分割槽
- 海量資料處理:十道面試題與十個海量資料處理方法總結面試題
- 海量資料處理利器greenplum——初識
- 海量資料處理_資料泵分批資料遷移
- 海量資料處理_表結構變更
- 海量資料處理_刪除重複行
- 海量資料處理_使用外部表進行資料遷移
- 快手關於海量模型資料處理的實踐模型
- 滴滴處理海量資料的祕訣是什麼?
- SQL Server 2005對海量資料的處理SQLServer
- 海量資料處理_表分割槽(線上重定義)
- 海量資料處理利器 Roaring BitMap 原理介紹
- 超3萬億資料實時分析,JCHDB助力海量資料處理
- 大資料時代,野心勃勃的MongDB為你處理海量資料!大資料
- 關於海量資料處理分析的經驗總結
- 我的《海量資料處理與大資料技術實戰》出版啦!大資料
- 海量資料處理問題知識點複習手冊
- Jtti:怎樣正確處理Redis中的海量資料JttiRedis
- 羅強:騰訊新聞如何處理海量商業化資料?
- N道大資料海量資訊處理 演算法面試集錦大資料演算法面試
- 簡述高併發解決思路-如何處理海量資料(中)
- 教你如何迅速秒殺掉:99%的海量資料處理面試題面試題
- 處理海量資料的模式MapReduce,大規模資料集的並行運算模式並行
- 嵌入式:微軟將推出第二代AI處理器應對海量資料處理微軟AI
- 5.22成都workshop:1、海量資料儲存與多媒體處理
- O'Reilly精品圖書推薦:大資料猩球:海量資料處理實踐指南大資料
- mysql處理海量資料時的一些優化查詢速度方法MySql優化
- 經典演算法-海量資料處理演算法(top K問題)演算法
- Python資料處理(二):處理 Excel 資料PythonExcel
- 資料處理
- 從併發程式設計到分散式系統-如何處理海量資料(上)程式設計分散式
- 十道海量資料處理面試題與十個方法大總結(轉)面試題
- 一套用來處理海量資料的軟體工具應運而生,這就是大資料!大資料