- Hadoop大數據技術開發實戰
- 張偉洋
- 572字
- 2020-03-06 11:48:42
5.5 案例分析:求平均分
本例通過對輸入文件中的學生三科成績進行計算,得出每個學生的平均成績。輸入文件中的每行內容均為一個學生的姓名和其相應的成績,每門學科為一個文件。要求輸出結果中每行有兩個數據,其中第一個代表學生的姓名,第二個代表其平均成績。
輸入的三個文件內容如下:
math.txt:

chinese.txt:

english.txt:

期望輸出結果如下:

1. 設計思路
根據MapReduce的工作原理可知,Map任務最終處理的結果對<key,value>會送到Reduce任務進行合并,具有相同key的<key,value>對則會送到同一個 Reduce任務中進行處理,即Reduce任務處理的數據是key和這個key對應的所有value的一個集合(value-list)。
MapReduce經典的WordCount(單詞計數)例子是將接收到的每一個value-list進行求和,進而得到所需的結果。而本例中,我們將Reduce任務接收到的value-list進行求平均分后,作為輸出的value值即可,輸出的key值仍然為接收到的key。
整個求平均分的流程如圖5-9所示。

圖5-9 MapReduce求平均分執行流程
2. 程序源碼
項目的新建及依賴jar包的引入見5.4節的數據去重案例,此處不再贅述。
本例完整的程序源代碼如下:



需要注意的是,Hadoop在涉及編碼時默認使用的是UTF-8,如果文件編碼格式是其他類型(如GBK),則會出現亂碼。此時只需在map()或reduce()方法中讀取Text時,進行一下轉碼,確保都是以UTF-8的編碼方式在運行即可,轉碼的核心代碼如下:

3. 程序運行
程序的打包和運行參考前面的“單詞計數”和“數據去重”案例,此處不再贅述。
執行完成后,查看HDFS的/output目錄生成的結果內容,如圖5-10所示。

圖5-10 查看HDFS結果內容
- 我們都是數據控:用大數據改變商業、生活和思維方式
- MySQL高可用解決方案:從主從復制到InnoDB Cluster架構
- 從零開始學Hadoop大數據分析(視頻教學版)
- Visual Studio 2015 Cookbook(Second Edition)
- Enterprise Integration with WSO2 ESB
- Spark大數據編程實用教程
- MATLAB Graphics and Data Visualization Cookbook
- Splunk智能運維實戰
- 深入理解InfluxDB:時序數據庫詳解與實踐
- Expert Python Programming(Third Edition)
- 數據指標體系:構建方法與應用實踐
- 大數據隱私保護技術與治理機制研究
- 碼上行動:利用Python與ChatGPT高效搞定Excel數據分析
- 數據迷霧:洞察數據的價值與內涵
- C# 7 and .NET Core 2.0 High Performance