一個單詞統計的例項,怎樣通過MapReduce完成排序?

shenmanli發表於2017-08-31
假設有一批海量的資料,每個資料都是由26個字母組成的字串,原始的資料集合是完全無序的,怎樣通過MapReduce完成排序工作,使其有序(字典序)呢?


對原始的資料進行分割(Split),得到N個不同的資料分塊:



例項分析:WordCount





這個類實現Mapper介面中的map 方法,輸入引數中的value 是文字檔案中的一行,利用StringTokenizer將這個字串拆成單詞,然後將輸出結果<單詞,1> 寫入到org.apache.hadoop.mapred.OutputCollector中。





實現Reduce 類


這個類實現Reducer 介面中的reduce 方法, 輸入引數中的key, values 是由Map 任務輸出的中間結果,


values 是一個Iterator, 遍歷這個Iterator, 就可以得到屬於同一個key 的所有value。


此處,key是一個單詞,value 是詞頻。只需要將所有的value 相加,就可以得到這個單詞的總的出現次數。



執行Job


在Hadoop中一次計算任務稱之為一個job, 可以通過一個JobConf物件設定如何執行這個job。


然後將JobConf物件作為引數,呼叫JobClient的runJob, 開始執行這個計算任務。



實驗結果



相關文章