1. 程式人生 > >編寫MapReduce程式示例——求平均成績

編寫MapReduce程式示例——求平均成績

輸入檔案:

由於不識別中文,所以暫時使用姓名拼音

jiangxin 94
wangziwen 78
yangzi 83
wangkai 89
jiangxin 80
wangziwen 84
liutao 90
liutao 82
jiangxin 76
wangkai 77
wangkai 91
yangzi 86
jiangxin 88

每一行為一個學生姓名及一科成績,如果有多門學科,則該學生存在多行資料。

這裡寫圖片描述

這裡寫圖片描述

編寫程式碼:

package zmy.examples;  

import java.io.IOException
; import java.util.StringTokenizer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop
.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class ZMY_AverageScore { //定義log變數 public static final Log LOG = LogFactory.getLog
(FileInputFormat.class); public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); String ScoreOne = itr.nextToken(); int ScoreInt = Integer.parseInt(ScoreOne); context.write(word,new IntWritable(ScoreInt)); } } } public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context ) throws IOException, InterruptedException { int sum = 0; int scoreNum = 0; for (IntWritable val : values) { scoreNum ++; sum += val.get(); } int averageScore = sum/scoreNum; result.set(averageScore); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); //檢查執行命令 String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: average score <in> <out>"); System.exit(2); } Job job = new Job(conf, "score average"); job.setJarByClass(ZMY_AverageScore.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } }

執行結果:

這裡寫圖片描述

相關推薦

編寫MapReduce程式示例——平均成績

輸入檔案: 由於不識別中文,所以暫時使用姓名拼音 jiangxin 94 wangziwen 78 yangzi 83 wangkai 89 jiangxin 80 wangziwen 84 liutao 90 liutao 8

杭電2023 平均成績(及一些易見的錯誤)

競賽 斷點 sco ani 今天 new 沒有 math 的人   鏈接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2023   首先,想說下,這題對我來說可能是一個陰影。因為在自己學校的程序競賽中,這是第二題,當時自己

平均成績使用二維數組(網上找的,僅自用,非原創)

student sys read his += class a oid new stat using System;class AverageofScore{ public static void Main() { int[,] student_score=new int

2023.平均成績

printf ++ amp mil pan u+ strong scanf nbsp #include<stdio.h> #include<string.h> double student[55],subject[9],sore[55][9]; in

Hadoop學習3-Macbook環境在IDEA中編寫MapReduce程式

Hadoop學習3-Macbook環境在IDEA中編寫MapReduce程式 新建一個Maven專案 不用說了,普通的Maven專案就行。 加入Hadoop依賴 其中的${hadoop.version}對應自己使用的Hadoop版本 hadoop-client

python-輸入輸出練習題平均成績

求平均成績(python3直譯器) 輸入學生姓名; 依次輸入學生的三門科目成績; 計算該學生的平均成績, 並列印; 平均成績保留一位小數點; 計算該學生語文成績佔總成績的百分之多少?並列印。eg: 78%; name = input('學生姓名:') chinese = float(

編寫MapReduce程式(簡單的電話被呼叫分析程式

由於Hadoop 2.2.0目前還沒有好用的Eclipse外掛,目前使用Eclipse上編寫程式碼,而後放到Hadoop環境執行的形式。 準備工作: 1、搭建Hadoop環境,建立專案,專案的BuildPath中新增所有Hadoop中的jar包; 2、構造資料集:每一行資料兩個號碼組成,

編寫一個程式出滿足下列條件的四位數:該數是個完全平方數,且第一、三位數字之和為10,第二、四位數字之積為12

編寫一個程式,求出滿足下列條件的四位數:該數是個完全平方數,且第一、三位數字之和為10,第二、四位數字之積為12 程式碼: #include <stdio.h> #include <math.h> //編寫一個程式,求出滿足下列條件的四位數: //該數是個

hdu 平均成績

Problem Description 假設一個班有n(n<=50)個學生,每人考m(m<=5)門課,求每個學生的平均成績和每門課的平均成績,並輸出各科成績均大於等於平均成績的學生數量。 Input 輸入資料有多個測試例項,每個測試例項的第一行包括兩

一個MapReduce 程式示例 細節決定成敗(一)

最近在看MapReduce,想起一直都是Copy 然後修改的方法來寫。突然想試試自己動手寫一個級其簡單的mr程式。 細節決定成敗啊,不試不知道,一試才能發現平時注意不到的細節。 下面是我用了很快時間寫好的一個程式,注意,這份是有問題的! package wordcount;

一個MapReduce 程式示例 細節決定成敗(二) :觀察日誌及 Counter

下面是一個計算輸入檔案中a~z每個單字元的數量的一個map reduce 程式。 package wordcount; import java.io.IOException; import org.apache.commons.lang.StringUtils; imp

hdu 2023 平均成績(c語言)

hdu 2023 求平均成績 點選做題網站連結 題目描述 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 假設一個班有

已確定學生人數,輸入成績平均成績(JAVA)

1、已確定學生人數,輸入學生成績,求平均成績程式碼為:import java.util.Scanner; public class clock { private static Scanner sc; public static void main(String[]

Python練習題5(水仙花數):編寫一個程式 100~999 之間的所有水仙花數 (如果一個 3 位數等於其各位數字的立方和,則稱這個數為水仙花數)

方法一:使用int和str,將int轉成字串拼接後再轉成int。 1 for i in range(1,10): 2 for j in range(0,10): 3 for k in range(0,10): 4 num = int(str(i) + s

一個MapReduce 程式示例 細節決定成敗(四) :In-Map Aggregation

為什麼使用in-map aggregation, 與combine 有什麼區別,什麼時候使用combiner ,什麼時候使用in-map 聚合? 先介紹用一張圖看看一下combiner 在一個mr job中的位置。  下面上乾貨: 資料檔案 由  InputFormat

HDU2023 平均成績【入門】

求平均成績 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 135296    Accepted Submis

JavaScript編寫一個程式出200到300之間滿足如下條件的數:三個數字之積為42,三個數字之和為12

function num(){ for(i=200;i<301;i++){ var a=parseInt(i/100);//百位取整 var b=parseIn

平均成績

對於每個測試例項,輸出3行資料,第一行包含n個數據,表示n個學生的平均成績,結果保留兩位小數;第二行包含m個數據,表示m門課的平均成績,結果保留兩位小數;第三行是一個整數,表示該班級中各科成績均大於等於平均成績的學生數量。  每個測試例項後面跟一個空行。  (adsbygoo

hdu2023 平均成績 (C語言)

Problem Description 假設一個班有n(n<=50)個學生,每人考m(m<=5)門課,求每個學生的平均成績和每門課的平均成績,並輸出各科成績均大於等於平均成績的學生數量。 Input 輸入資料有多個測試例項,每個測試例項的第一行包括兩個