场景

MapReduce Java API实例-统计单词出现频率:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119410169

在上面对单个txt文件进行统计的基础上,Mapreduce也是支持文件夹下多个文件处理的。

统计学生各科平均成绩,每科成绩为一个文件。

在Map阶段和上面统计单次频率差不多,然后在Reduce阶段求出总和后,除以科目数,

并将输出value的数据类型设置为FloatWritable即可。

新建三个数据集,chinese.txt、math.txt、english.txt

分别代表三科成绩,每科成绩的格式如下

每科成绩左边是姓名,右边是成绩,并且姓名和成绩之间是用空格分开。

注意这里是一个空格,因为下面处理的规则就是按照中间一个空格来处理的。

这点要尤为注意,并且如果这个文件是在Windows上新建并添加的空格,一定要注意排查上传到Centos以及HDFS集群中是否格式变化。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、Map实现代码

package com.badao.averagegrade;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;
import java.util.StringTokenizer;public class AverageGradeMapper extends Mapper<Object,Text,Text,IntWritable> {//1、编写map函数,通过继承Mapper类实现里面的map函数//   Mapper类当中的第一个函数是Object,也可以写成Long//   第一个参数对应的值是行偏移量//2、第二个参数类型通常是Text类型,Text是Hadoop实现的String 类型的可写类型//   第二个参数对应的值是每行字符串//3、第三个参数表示的是输出key的数据类型//4、第四个参数表示的是输出value的数据类型,IntWriable 是Hadoop实现的int类型的可写数据类型public final static IntWritable one = new IntWritable(1);public Text word = new Text();//key 是行偏移量//value是每行字符串@Overridepublic void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] str = value.toString().split(" ");context.write(new Text(str[0]),new IntWritable(Integer.parseInt(str[1])));}
}

2、Reduce代码

package com.badao.averagegrade;import org.apache.hadoop.io.FloatWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;//第一个参数类型是输入值key的数据类型,map中间输出key的数据类型
//第二个参数类型是输入值value的数据类型,map中间输出value的数据类型
//第三个参数类型是输出值key的数据类型,他的数据类型要跟job.setOutputKeyClass(Text.class) 保持一致
//第四个参数类型是输出值value的数据类型,它的数据类型要跟job.setOutputValueClass(IntWriable.class) 保持一致public class AverageGradeReducer extends Reducer<Text, IntWritable,Text, FloatWritable> {public FloatWritable result = new FloatWritable();//key就是单词  values是单词出现频率列表@Overridepublic void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for(IntWritable val:values){//get就是取出IntWriable的值sum += val.get();}//3表示科目数result.set((float)sum/3);context.write(key,result);}
}

3、Job代码

package com.badao.averagegrade;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.FloatWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class AverageGradeJob {public static void main(String[] args) throws InterruptedException, IOException, ClassNotFoundException {wordCountLocal();}public static void wordCountLocal()throws IOException, ClassNotFoundException, InterruptedException{Configuration conf = new Configuration();conf.set("fs.defaultFS","hdfs://192.168.148.128:9000");//conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");System.setProperty("HADOOP_USER_NAME","root");//实例化一个作业,word count是作业的名字Job job = Job.getInstance(conf, "averagegrade");//指定通过哪个类找到对应的jar包job.setJarByClass(AverageGradeJob.class);//为job设置Mapper类job.setMapperClass(AverageGradeMapper.class);//为job设置reduce类job.setReducerClass(AverageGradeReducer.class);job.setMapOutputValueClass(IntWritable.class);//为job的输出数据设置key类job.setOutputKeyClass(Text.class);//为job输出设置value类job.setOutputValueClass(FloatWritable.class);//为job设置输入路径,输入路径是存在的文件夹/文件FileInputFormat.addInputPath(job,new Path("/grade"));//为job设置输出路径FileOutputFormat.setOutputPath(job,new Path("/averageGrade3"));job.waitForCompletion(true);}}

然后将上面的三个成绩的txt上传到集群HDFS中,运行job

可以在集群HDFS中看到生成统计好的文件,查看paat-r-00000的内容

MapReduce Java API实例-统计平均成绩相关推荐

  1. MapReduce Java API实例-排序

    场景 MapReduce Java API实例-统计单词出现频率: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11941016 ...

  2. MapReduce Java API实例-统计出现过的单词

    场景 MapReduce Java API实例-统计单词出现频率: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11941016 ...

  3. MapReduce Java API实例-统计单词出现频率

    场景 Windows下使用Java API操作HDFS的常用方法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11938210 ...

  4. java mapreduce api_Hadoop实战-初级部分 之 Hadoop MapReduce JAVA API

    精品视频课程推荐 Java数据结构和算法精讲版 本课程专注于数据结构和算法的内容,使用Java来进行代码示例,不空洞的讲解概念和理论,重点放在代码的实现和示例上. 从零开始.全面系统.成体系的讲解数据 ...

  5. MapReduce Java API-多输入路径方式

    场景 MapReduce Java API实例-统计单词出现频率: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11941016 ...

  6. hbase java api 两种方式

    NoSQL Hbase JAVA API 实例一 导入架包: <dependency><groupId>org.apache.hbase</groupId>< ...

  7. es java api 子查询,criteria 子查询 es

    elasticsearch.core.query中Criteria类各个方法详解--CSDN... 2016年2月25日 asticsearch.core.query中Criteria类各个方法详解 ...

  8. libsvm java 实例_LibSVM Java API调用示例程序

    [实例简介] LibSVM Java API调用示例程序 Eclipse 完整工程可以运行 相关详情见http://blog.csdn.net/yangliuy/article/details/804 ...

  9. java api 获取jvm实例_JVMTI那些事——和Java相互调用

    前面几篇文章介绍了JVMTI接口的一些基本概念,以及如何编写一个基于JVMTI的agent. 那些简单的例子只是JVMTI agent自己实现一些简单的功能,如果能够将JVMTI提供的接口经过包装之后 ...

最新文章

  1. 在线作图|2分钟在线绘制三维CCA图
  2. Mac-使用技巧之快速新建txt文本
  3. 干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
  4. 运行Java web时遇到的错误
  5. 什么是可变变量以及如何使用
  6. 【多线程】什么是线程安全?
  7. ERROR 126 (HY000) at line 1: Incorrect key file for table '/tmp/#sql_7b09_0.MYI'; try to repair it
  8. eclipse中配置heritrix1.14.3
  9. 小布语音下载安装_一加语音助手小布体验:还有很长的路要走
  10. html制作摩天轮,LED幻彩摩天轮的制作方法
  11. Tcl 语言 ——语法篇
  12. canvas基础学习笔记
  13. 图灵机器人—免费API
  14. 奥鹏计算机基础18秋在线作业答案,1056《 计算机基础》20秋西南大学在线作业答案答案...
  15. 0-SIM卡的迭代(SIM-USIM-eSIM-vSIM-softSIM)
  16. 0基础学Java需要多久?
  17. Lady General Hua Mu-lan花木兰剧本
  18. Android ViewFliper
  19. [pytorch]yolov3.cfg参数详解(每层输出及route、yolo、shortcut层详解)
  20. (一)Google Earth Engine概述

热门文章

  1. android 4.0.3固件,Vi30豪华版_Android4.0.3-1.0测试版固件刷机教程【MM刷机】
  2. c语言万历年系统设计报告,C语言编写单片机万历系统课程设计报告分.doc
  3. Java设计模式-工厂模式(3)抽象工厂模式
  4. 史上最详细 最官方的 SpringBoot和SpringCloud的版本选择!!!! 绝对让你心服口服的版本选择方式!!!
  5. 电脑wifi不见了_大家好,我是来给你家 WiFi 提速的
  6. 俄罗斯小方块游戏html,通过h5的canvas手写一个俄罗斯方块小游戏
  7. 金蝶结账时显示系统错误h80004005_干货!超详细操作流程!金蝶、用友日常账务处理大全!...
  8. windows 下执行mysql脚本_Windows下批处理执行MySQL脚本文件
  9. kafka linux客户端,kafka linux 客户端操作命令
  10. 标签页如何用php静态显示,php使用标签替换的方式生成静态页面