大數據算法---海量數據處理面試題整理


 

1. 海量數據處理常用數據結構

數據結構:

【Bloom Filter】

  它實際上是一個很長的二進制向量和一系列隨機映射函數

  布隆過濾器可以用於檢索一個元素是否在一個集合中

  它的優點是空間效率和查詢時間都遠遠超過一般的算法,缺點是有一定的誤識別率和刪除困難

 

【Bit map】

  Bit-map就是用一個bit位來標記某個元素對應的Value, 而Key即是該元素。由於采用了Bit為單位來存儲數據,因此在存儲空間方面,可以大大節省

  

 

【Hash】

【Trie】

【堆】

 

常見思想:

【分而治之/hash映射 + hash統計 + 堆/快速/歸並排序】

 對大文件使用hash取模映射成小文件,再在小文件中分別統計

 

【雙層桶划分】

【Trie樹/數據庫/倒排索引】

【外排序】

【分布式處理之Hadoop/Mapreduce】

 

 

 

2. 面試題剖析

海量數據面試題的常見考點,無非就是兩個,一是數據太大,無法一次性裝入內存;二是數據量太大,無法單機快速處理

常用的思想就是分而治之,先化大為小,化繁為簡,再歸並結果

 

例1:  海量日志數據,提取出某日訪問百度次數最多的那個IP

(文件總量多大 -> 能一次載入內存嗎 -> 怎么將文件化大為小,一般可以采取hash -> 然后怎么歸並)

首先可以估計下某天全部的日志大小,當然可以選取任一個合理的估計 ,而不需要很精確。比如IP總的可能情況是?

解答思路:

解答
1.IP地址最多有2^32=4G種取值情況,所以不能完全加載到內存中處理; 
2.可以考慮采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分別存儲到1024個小文件中。這樣,每個小文件最多包含4MB個IP地址; 
3.對於每一個小文件,可以構建一個IP為key,出現次數為value的Hash map,同時記錄當前出現次數最多的那個IP地址;
4.可以得到1024個小文件中的出現次數最多的IP,再依據常規的排序算法得到總體上出現次數最多的IP;
 

 

key: 如果出現文件很大,又是內存受限,則考慮hash成小文件

 

 

例2: 搜索引擎會通過日志文件把用戶每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255字節。假設目前有一千萬個記錄(這些查詢串的重復度比較高,雖然總數是1千萬,但如果除去重復后,不超過3百萬個。一個查詢串的重復度越高,說明查詢它的用戶越多,也就是越熱門),請你統計最熱門的10個查詢串,要求使用的內存不能超過1G 

 

1.hash_map統計:先對這批海量數據預處理。具體方法是:維護一個Key為Query字串,Value為該Query出現次數的HashTable,即hash_map(Query,Value),每次讀取一個Query,如果該字串不在Table中,那么加入該字串,並且將Value值設為1;如果該字串在Table中,那么將該字串的計數加一即可。最終我們在O(N)的時間復雜度內用Hash表完成了統計;
2.堆排序:第二步、借助堆這個數據結構,找出Top K,時間復雜度為N‘logK。即借助堆結構,我們可以在log量級的時間內查找和調整/移動。因此,維護一個K(該題目中是10)大小的小根堆,然后遍歷300萬的Query,分別和根元素進行對比。所以,我們最終的時間復雜度是:O(N) + N' * O(logK),(N為1000萬,N’為300萬)
解答

 

 

 

例3: 有一個1G大小的一個文件,里面每一行是一個詞,詞的大小不超過16字節,內存限制大小是1M。返回頻數最高的100個詞

解答
分而治之 + hash統計 + 堆/快速排序

1.分而治之/hash映射:順序讀文件中,對於每個詞x,取hash(x)%5000,然后按照該值存到5000個小文件(記為x0,x1,...x4999)中。這樣每個文件大概是200k左右。如果其中的有的文件超過了1M大小,還可以按照類似的方法繼續往下分,直到分解得到的小文件的大小都不超過1M。
2.hash_map統計:對每個小文件,采用trie樹/hash_map等統計每個文件中出現的詞以及相應的頻率。
3.堆/歸並排序:取出出現頻率最大的100個詞(可以用含100個結點的最小堆)后,再把100個詞及相應的頻率存入文件,這樣又得到了5000個文件。最后就是把這5000個文件進行歸並(類似於歸並排序)的過程了。

 

 

 

 

 

 

 

參考資料

https://blog.csdn.net/v_july_v/article/details/7382693

https://blog.csdn.net/v_JULY_v/article/details/6279498

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM