hadoop mapreduce求平均分 求平均分的關鍵在于,利用mapreduce過程中,一個key聚合在一起,輸送到一個reduce的特性。 假設三門課的成績如下: china.txt [plain] 張三 78 李四 89 王五 96 趙六 67 english.txt [plain] 張三 80 李四 82 王五 84 趙六 86 math
hadoop mapreduce求平均分
求平均分的關鍵在于,利用mapreduce過程中,一個key聚合在一起,輸送到一個reduce的特性。
假設三門課的成績如下:
china.txt
[plain]
張三 78
李四 89
王五 96
趙六 67
english.txt
[plain]
張三 80
李四 82
王五 84
趙六 86
math.txt
[plain]
張三 88
李四 99
王五 66
趙六 72
mapreduce如下:
[plain]
public static class Map extends Mapper
// 實現map函數
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
// 將輸入的純文本文件的數據轉化成String
String line = value.toString();
// 將輸入的數據首先按行進行分割
StringTokenizer tokenizerArticle = new StringTokenizer(line, "\n");
// 分別對每一行進行處理
while (tokenizerArticle.hasMoreElements()) {
// 每行按空格劃分
StringTokenizer tokenizerLine = new StringTokenizer(tokenizerArticle.nextToken());
String strName = tokenizerLine.nextToken();// 學生姓名部分
String strScore = tokenizerLine.nextToken();// 成績部分
Text name = new Text(strName);
int scoreInt = Integer.parseInt(strScore);
// 輸出姓名和成績
context.write(name, new IntWritable(scoreInt));
}
}
}
public static class Reduce extends Reducer
// 實現reduce函數
public void reduce(Text key, Iterable
int sum = 0;
int count = 0;
Iterator
while (iterator.hasNext()) {
sum += iterator.next().get();// 計算總分
count++;// 統計總的科目數
}
int average = (int) sum / count;// 計算平均成績
context.write(key, new IntWritable(average));
}
}
輸出如下:
[plain]
張三 82
李四 90
王五 82
趙六 75
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com