1. import java.io.*;
  2. import java.util.*;
  3.  
  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.io.*;
  6. import org.apache.hadoop.mapreduce.*;
  7. import org.apache.hadoop.mapreduce.lib.output.*;
  8. import org.apache.hadoop.mapreduce.lib.input.*;
  9. import org.apache.hadoop.conf.*;
  10. import org.apache.hadoop.util.*;
  11. public class Score_Process extends Configured implements Tool {
  12. /**
  13. * 程序说明:主要用来实现计算学生的平均成绩。
  14. * 数据输入:文件形式输入,每一行包含学生姓名 学生成绩。一个学生有多门成绩则有多行。例如:张三 98
  15. * 数据输出:张三 84 学生姓名 学生平均成绩
  16. * 实现思路:在map阶段<张三,(98,68,……)>
  17. * **/
  18.  
  19. public static class Map extends Mapper<LongWritable,Text,Text,IntWritable>{
  20. public void map(LongWritable key,Text value,Context context)throws IOException,InterruptedException{
  21. String line=value.toString();
  22. System.out.println(line);//测试
  23. StringTokenizer tokenizer=new StringTokenizer(line);
  24. while(tokenizer.hasMoreTokens()){
  25. String name=tokenizer.nextToken();
  26. String strscore=tokenizer.nextToken();
  27. int intscore=Integer.parseInt(strscore);
  28. context.write(new Text(name), new IntWritable(intscore));
  29. }
  30.  
  31. }
  32.  
  33. }
  34.  
  35. public static class Reduce extends Reducer<Text,IntWritable,Text,IntWritable>{
  36. public void reduce(Text key,Iterable<IntWritable>values,Context context) throws IOException, InterruptedException{
  37. int sun=0,count=0;
  38. for(IntWritable val:values){
  39. sun+=val.get();
  40. count++;
  41. }
  42. int averscore=(int)sun/count;
  43. context.write(key, new IntWritable(averscore));
  44. }
  45.  
  46. }
  47.  
  48. public int run(String[] args) throws Exception{
  49. Job job=new Job(getConf());
  50. job.setJarByClass(Score_Process.class);
  51. job.setJobName("Score_Process");
  52.  
  53. job.setOutputKeyClass(Text.class);
  54. job.setOutputValueClass(IntWritable.class);
  55.  
  56. job.setMapperClass(Map.class);
  57. //job.setCombinerClass(Reduce.class);
  58. job.setReducerClass(Reduce.class);
  59.  
  60. job.setInputFormatClass(TextInputFormat.class);
  61. job.setOutputFormatClass(TextOutputFormat.class);
  62.  
  63. FileInputFormat.setInputPaths(job, new Path(args[0]));
  64. FileOutputFormat.setOutputPath(job, new Path(args[1]));
  65. boolean success=job.waitForCompletion(true);
  66.  
  67. return success?0:1;
  68. }
  69.  
  70. public static void main(String[] args)throws Exception{
  71. int ret=ToolRunner.run(new Score_Process(), args);
  72. System.exit(ret);
  73. }
  74.  
  75. }

mao/reduce实现求平均值的更多相关文章

  1. PAT-乙级-1054. 求平均值 (20)

    1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...

  2. excl剔除不合格数据求平均值

    excl剔除不合格数据求平均值 trimmean函数 正态分布: CONFIDENCE.NORM 函数

  3. python 录入姓名和成绩, 并且求平均值

    lst = []while 1: a = input("请输入学生的姓名和成绩(姓名_成绩), 输入Q退出录入:") if a.upper() == "Q": ...

  4. 深度学习原理与框架-图像补全(原理与代码) 1.tf.nn.moments(求平均值和标准差) 2.tf.control_dependencies(先执行内部操作) 3.tf.cond(判别执行前或后函数) 4.tf.nn.atrous_conv2d 5.tf.nn.conv2d_transpose(反卷积) 7.tf.train.get_checkpoint_state(判断sess是否存在

    1. tf.nn.moments(x, axes=[0, 1, 2])  # 对前三个维度求平均值和标准差,结果为最后一个维度,即对每个feature_map求平均值和标准差 参数说明:x为输入的fe ...

  5. JS创建一个数组1.求和 2.求平均值 3.最大值 4.最小值 5.数组逆序 6.数组去重 0.退出

    rs = require("readline-sync"); let arr = []; console.log("请输入数组的长度:"); let arr_l ...

  6. Linux下的计算命令和求和、求平均值、求最值命令梳理

    在Linux系统下,经常会有一些计算需求,那么下面就简单梳理下几个常用到的计算命令 (1)bc命令bc命令是一种支持任意精度的交互执行的计算器语言.bash内置了对整数四则运算的支持,但是并不支持浮点 ...

  7. PAT 乙级 1054 求平均值 (20) C++版

    1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...

  8. C# Linq to Entity Lamda方式分组并求和求平均值

    1.单字段分组并求和: var list = data.GroupBy(g => g.GoodsId).Select(e => new { GoodsId = e.Key, Qty = e ...

  9. PAT 1054 求平均值 (20)(代码+思路+测试用例)

    1054 求平均值 (20)(20 分) 本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输入是[-1000,1000]区 ...

随机推荐

  1. spark-shell 执行脚本并传入参数

    使用方法: ./spark-script.sh your_file.scala first_arg second_arg third_arg 脚本: scala_file=$ arguments=$@ ...

  2. webbench

    Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测 ...

  3. linux环境下安装php扩展

    本文只提供源码安装的方法(已安装pcntl为例) 其他方法请参考:http://doc3.workerman.net/appendices/install-extension.html 1.利用php ...

  4. FusionCharts xml入门教程

    由于项目需求需要做一个报表,选择FusionCharts作为工具使用.由于以 前没有接触过报表,网上也没有比较详细的fusionCharts教程,所以决定好好研究FusionCharts,同时做一个比 ...

  5. RabbitMQ PHP操作类,守护进程及相关测试数据

    封装类如下: <?php /* * amqp协议操作类,可以访问rabbitMQ * 需先安装php_amqp扩展 */ class RabbitMQCommand{ public $confi ...

  6. 解析sql中的表名

    最近的项目需求中需要解析sql得表名,由于只需要表名我觉得应该用相对粗暴一点的方式来解析 初步思路: 1.转义字符:去除两个引号连在一起的 2.字符串: 去除所有被引号包裹的 3.括号:识别括号处理 ...

  7. C语言之程序结构

    一个好的程序首先要有好的程序结构,我从变量和结构两个方面来做分析. 一.浅谈程序中的变量 一个程序架构最基本的就是程序变量,谈到程序中的变量,我们应该考虑两部分,一方面是变量的作用域,一方面是变量的生 ...

  8. NDK_ROOT找不到的解决方法 MACOS

    只要在Eclipse上进行配置就行了,看图说话  

  9. STM32固件库

    一.STM32固件库开发和传统寄存器开发方式的区别 二.CMSIS标准 CMSIS标准--Cortex Microcontroller Software Interface Standard,是ARM ...

  10. Steam游戏黑屏与游戏直接安装方法

    黑屏原因主要是360禁止了反作弊进程,解决方法: Steam游戏目录: Steam\steamapps\common\*** 例如黎明杀机,备份时候可直接备份该目录下 Dead by Daylight ...