大資料零基礎入門學習 topk與詞頻統計

2021-09-11 06:01:29 字數 2620 閱讀 3847

topk elements 問題用於找出一組數中最大的 k 個的數。

此外還有一種叫 kth element 問題,用於找出一組數中第 k 大的數。

其實要求解 topk elements,可以先求解 kth element,因為找到 kth element 之後,再遍歷一遍,大於等於 kth element 的數都是 topk elements。

方法1:

經典演算法之快速選擇演算法

相信快速排序演算法這種經典的演算法大家並不陌生。但是基於快速演算法的各種變形,你了解嗎?

其中很重要的一種變形就是快速選擇演算法, 通常用來在未排序的陣列中尋找第k小/第k大的元素。快速選擇及其變種是實際應用中最常使用的高效選擇演算法。

快速選擇的總體思路與快速排序一致,選擇乙個元素作為基準來對元素進行分割槽,將小於和大於基準的元素分在基準左邊和右邊的兩個區域。不同的是,快速選擇並不遞迴訪問雙邊,而是只遞迴進入一邊的元素中繼續尋找。這降低了平均時間複雜度,從o(

nlog 

n)至o(n

),不過最壞情況仍然是o(n2

)。 方法2:

維護乙個大小為 k 的最小堆,堆頂元素就是 kth element。

使用大頂堆來維護最小堆,而不能直接建立乙個小頂堆並設定乙個大小,企圖讓小頂堆中的元素都是最小元素。

維護乙個大小為 k 的最小堆過程如下:在新增乙個元素之後,如果大頂堆的大小大於 k,那麼需要將大頂堆的堆頂元素去除。

這也是最常見的

使用 hashmap 進行頻率統計,然後使用快速選擇或者堆的方式找出頻率 topk。在海量資料場景下,也是使用先拆分再整合的方式來解決空間問題。

維護 d*w 大小的二維統計陣列,其中 d 是雜湊函式的個數,w 根據情況而定。

該演算法的思想和布隆過濾器類似,具有一定的誤差,特別是當 w 很小時。但是它能夠在單機環境下解決海量資料的頻率統計問題。

trie 樹可以用於解決詞頻統計問題,只要在詞彙對應節點儲存出現的頻率。它很好地適應海量資料場景,因為 trie 樹通常不高,需要的空間不會很大。

分布式情況下如何利用分布的計算資源來進行詞頻統計

把這堆牌分配給多個玩家;

讓每個玩家統計自己手中有多少張黑桃;

把所有玩家統計的黑桃數量加起來就是最終的結果。

某些計算任務能夠並行地進行,這些任務可拆分並且不能有資料依賴。例如斐波那契數列 f(n) = f(n-1) + f(n - 2),第 n 項的計算依賴於第 n - 1 項和第 n - 2 項的計算結果,因此就不能並行。但是對於將乙個二維陣列中每個元素都進行加 1 的計算,每個元素的計算都沒有資料依賴,因此能夠並行。

mapreduce 用來對海量資料進行離線分析,通過將計算任務分配給集群的多台機器,使得這些計算能夠並行地進行。

它分為 map 和 reduce 兩個階段:

在下圖中,

shuffle 過程主要是對 map 階段輸出的鍵值對進行整合,將鍵相同的鍵值對整合到一組中,得到 [k2, ] 的整合資料,作為 reudce 階段的輸入。

reduce 處理完之後得到 [k3, v3] 鍵值對,hadoop 會將輸出的資料存到分布式檔案系統 hdfs 中。

the weather is good

today is good

good weather is good

today has good weather

split-0: [0, "the weather is good]

split-1: [1, "today is good"]

split-2: [2, "good weather is good"]

split-3: [3, "today has good weather]

將輸入的字串 v1 進行切分,輸出 k2 為單詞, v2 為詞頻。

排序並將擁有相同鍵的資料整合,得到 [k2, ]。

["good", ]

["has", ]

["is", ]

["the", ]

["today", ]

["weater", ]

遍歷 shuffle 階段輸出的 集合,進行最終的統計。

reducer-0: ["good", 5]

reducer-1: ["has", 1]

reducer-2: ["is", 3]

reducer-3: ["the", 1]

reducer-4: ["today", 2]

reducer-5: ["weather", 3]

cyc20

大資料零基礎學習框架Hadoop HDFS

hadoop檔案系統使用分布式檔案系統設計開發。它是執行在普通硬體。不像其他的分布式系統,hdfs是高度容錯以及使用低成本的硬體設計。hdfs擁有超大型的資料量,並提供更輕鬆地訪問。為了儲存這些龐大的資料,這些檔案都儲存在多台機器。這些檔案都儲存以冗餘的方式來拯救系統免受可能的資料損失,在發生故障時...

大資料零基礎入門學習之Hadoop技術優缺點

hadoop的優點 1 hadoop具有按位儲存和處理資料能力的高可靠性。2 hadoop通過可用的計算機集群分配資料,完成儲存和計算任務,這些集群可以方便地擴充套件到數以千計的節點中,具有高擴充套件性。3 hadoop能夠在節點之間進行動態地移動資料,並保證各個節點的動態平衡,處理速度非常快,具有...

大資料零基礎入門學習之Hadoop技術優缺點

hadoop的優點 1 hadoop具有按位儲存和處理資料能力的高可靠性。2 hadoop通過可用的計算機集群分配資料,完成儲存和計算任務,這些集群可以方便地擴充套件到數以千計的節點中,具有高擴充套件性。3 hadoop能夠在節點之間進行動態地移動資料,並保證各個節點的動態平衡,處理速度非常快,具有...