海量資料處理

2021-08-20 13:34:55 字數 2874 閱讀 1073

1、常見海量資料處理方法

hash

bit-map(位圖法)、bllomfilter、資料庫優化、倒排索引、外排序、trie樹、

、雙層桶、mapreduce法、

分治

2、hash法

在海量資料處理中,hash法一般可以快速訪問、統計某些資料,將大量資料進行分類,例如,提取某日**次數最多的ip位址

3、bit-map位圖法

又叫位圖法,基本原理是使用位陣列來表示某些元素是否存在,它適用於海量資料的快速查詢、判重、刪除等。基本步驟:首先掃瞄一遍資料集合,找出集合中的最大元素;然後按照最大元素max建立乙個長度為max+1的新陣列,接著再次掃瞄原陣列中的資料集合,每遇到乙個元素就將新陣列中下標為元素值的位上置1或加1

可以通過位圖法來對海量資料集進行排序、查重或者判斷某數是否存在,時間複雜度位o(n),但是是以空間來換時間

4、bllomfilter

bit-map與hash的結合

5、堆

堆適用於海量資料求前n大(

最小堆)、前n小(

最大堆)、中位數(

雙堆)問題,其中n一般比較小

6、mapreduce

map(對映)reduce(化簡是雲計算的核心技術之一,是一種簡化平行計算的分布式程式設計模型。它為並行的資料處理提供了乙個簡單、高效的解決方案,其主要目的是為了大型集群的系統能在大資料集上進行並行工作,並用於大規模資料的並行運算

海量資料的處理,分布式的計算方式會導致網路間大量頻繁的資料交換,在這種情況下,網路頻寬相對屬於稀缺資源

海量資料處理的最大難題在於資料規模巨大,使得傳統處理方式面臨計算能力不足和儲存能力不足的瓶頸問題,而基於hadoop可以非常輕鬆和方便地完成處理海量資料的分布式並行程式,並執行於大規模集群上

mapreduce例項:

see《程式設計師面試筆試寶典》p405

7、單位換算

1g=1024m、1m=1024kb、1kb=1024b(byte)、1byte=8bit

//為了換算方便,可近似將1024取為1000

8、海量資料處理主要分類

三類:top k問題、重複問題、排序問題,一般三個問題會有交叉,尤其是在top k問題裡,先計算需要的記憶體,然後是根據具體問題選擇乙個解決方法

9、重複問題

一般用位圖法解決

10、排序問題

分治、位圖法排序(前提是沒有重複資料)、桶排

11、top k問題(5種方法)

1)將所有資料全部加入記憶體,在記憶體中用快排等常規排序演算法

2)用乙個容器儲存前k個數,然後依次將剩餘的數與容器中這k個數里的最小/大數進行比較,更新容器裡的數,最後輸出容器裡的數

3)分治

比如,將1億個數分為100份,每份100萬個資料,找出每份中最大的k個,最後再在這100*k個數中招最大的k個。其中,在100萬個數里找最大的k個可以使用快排:一次快排將資料分為兩堆,如果大的那堆個數大於k,則再快排大堆這堆,小的那一堆則直接排除去掉;若大的那堆個數n小於k,則對小的那堆再做快排,直到找到第k-n大的那個數字。這樣就找到了最大的k個。

4)hash法

通過hash法對這1億個數去重,然後再通過分治或最小堆來查詢最大的k個數

5)最小/最大堆

為了避免方法2中每次都遍歷這個容器,可以用最大堆或最小堆來存這k個資料,替換這個容器

12、對於多核計算機top k問題

可以先用hash分成n個部分,每個部分交給乙個單獨的執行緒來執行,最後由乙個執行緒來合併結果

相關題目:

參考《程式設計師面試筆試寶典》中的示例

1、10億個數中找出最大的10000個數

2、有10000000個記錄,這些查詢串的重複度比較高,如果除去重複後,不超過3000000個。乙個查詢串的重複度越高,說明查詢它的使用者越多,也就是越熱門。請統計最熱門的10個查詢串,要求使用的記憶體不能超過1gb。

3、有10個檔案,每個檔案1gb,每個檔案的每一行存放的都是使用者的query,每個檔案的query都可能重複。按照query的頻度排序。

4、有乙個1gb大小的檔案,裡面的每一行是乙個詞,詞的大小不超過16個位元組,記憶體限制大小是1mb。返回頻數最高的100個詞。

5、提取某日訪問**次數最多的那個ip。

6、10億個整數找出重複次數最多的100個整數。

7、搜尋的輸入資訊是乙個字串,統計300萬條輸入資訊中最熱門的前10條,每次輸入的乙個字串為不超過255b,記憶體使用只有1gb。

8、有1000萬個身份證號以及他們對應的資料,身份證號可能重複,找出出現次數最多的身份證號。

9、給你a、b兩個檔案,各放50億條url,每條url佔64位元組,記憶體限制為4g,讓你找出a、b之間相同的url,如果是3個甚至n個檔案呢?

11、已知某個檔案包含一些**號碼,每個**號碼為8位數字,統計不同的號碼個數

12、2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個整數。

13、100w個數中求前最大的100個數。

14、2.5億個int求它們的中位數。

乙個最大堆+乙個最小堆

15、1g的資料,找出裡面出現次數最少的3組資料

參考:《程式設計師面試筆試寶典》

海量資料處理

1 有一千萬條簡訊,有重複,以文字檔案的形式儲存,一行一條,有 重複。請用5分鐘時間,找出重複出現最多的前10條。方法1 可以用雜湊表的方法對1千萬條分成若干組進行邊掃瞄邊建雜湊表。第一次掃瞄,取首位元組,尾位元組,中間隨便兩位元組作為hash code,插入到hash table中。並記錄其位址和...

海量資料處理

給定a b兩個檔案,各存放50億個url,每個url各占用64位元組,記憶體限制是4g,如何找出a b檔案共同的url?答案 可以估計每個檔案的大小為5g 64 300g,遠大於4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。遍歷檔案a,對每個url求取hash url 1000...

海量資料處理

分而治之 hash對映 hash統計 堆 快速 歸併排序 300萬個查詢字串中統計最熱門的10個查詢。針對此類典型的top k問題,採取的對策往往是 hashmap 堆。hash統計 先對這批海量資料預處理。具體方法是 維護乙個key為query字串,value為該query出現次數的hashtab...