MapReduce编程练习(四),统计多个输入文件学生的平均成绩,
问题描述:
在输入文件中,有多个,其中每个输入文件代表一个学生的各科成绩,其中每行的数据形式为<科目,成绩>,你需要将每个文件中的每科目的成绩进行统计,然后求平均值。
输入文件格式:
这里有三个学生:
输出文件格式:
实例代码:
package com.test;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
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;
public class StudentAverage {
	public static void main(String[] args) throws IllegalArgumentException, IOException, ClassNotFoundException, InterruptedException {
		@SuppressWarnings("deprecation")
		Job job = new Job(new Configuration(), "StudentAverage");
		job.setJarByClass(StudentAverage.class);
		job.setMapperClass(Map.class);
		job.setReducerClass(Reduce.class);
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(IntWritable.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		FileInputFormat.setInputPaths(job, new Path("hdfs://localhost:9000/Student/input"));
		FileOutputFormat.setOutputPath(job, new Path("hdfs://localhost:9000/Student/output"));
		job.waitForCompletion(true);
		System.out.println("运行结束!");
	}
	public static class Map extends Mapper<LongWritable, Text, Text, IntWritable>{
		protected void map(LongWritable key, Text value,
				org.apache.hadoop.mapreduce.Mapper<LongWritable, Text, Text, IntWritable>.Context context)
				throws java.io.IOException, InterruptedException {
			String[] data = value.toString().split(" ");
			context.write(new Text(data[0]), new IntWritable(Integer.parseInt(data[1])));
		};
	}
	public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {
		protected void reduce(Text key, java.lang.Iterable<IntWritable> values, Context context)
				throws java.io.IOException, InterruptedException {
			int average = 0;
			int sum = 0;
			for (IntWritable value : values) {
				   sum += value.get();
			}
			average = sum / 3;
		    context.write(new Text(key), new IntWritable(average));
		};
	}
}
												
											MapReduce编程练习(四),统计多个输入文件学生的平均成绩,的更多相关文章
- YTU 2626: B 统计程序设计基础课程学生的平均成绩
		
2626: B 统计程序设计基础课程学生的平均成绩 时间限制: 1 Sec 内存限制: 128 MB 提交: 427 解决: 143 题目描述 程序设计基础课程的学生成绩出来了,老师需要统计出学生 ...
 - 问题 C: B 统计程序设计基础课程学生的平均成绩
		
题目描述 程序设计基础课程的学生成绩出来了,老师需要统计出学生个数和平均成绩.学生信息的输入如下: 学号(num) 学生姓名(name) ...
 - MapReduce编程:词频统计
		
首先在项目的src文件中需要加入以下文件,log4j的内容为: log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j ...
 - MapReduce编程实例4
		
MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...
 - MapReduce编程实例2
		
MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...
 - MapReduce编程实例6
		
前提准备: 1.hadoop安装运行正常.Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常.集成开发环境配置请参考 :Ubuntu 搭建Hadoop ...
 - MapReduce编程实例5
		
前提准备: 1.hadoop安装运行正常.Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常.集成开发环境配置请参考 :Ubuntu 搭建Hadoop ...
 - MapReduce编程实例3
		
MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...
 - 假期学习【五】RDD编程实验四
		
今天完成了实验四的第二问和第三问 第二题 对于两个输入文件 A 和 B,编写 Spark 独立应用程序,对两个文件进行合并,并剔除其 中重复的内容,得到一个新文件 C.下面是输入文件和输出文件的一个样 ...
 
随机推荐
- lua脚本简介
			
Lua [1] 是一个小巧的脚本语言.它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ier ...
 - sqlite嵌入式数据库简介及特性
			
p.p1 { margin: 0; font: 12px "Helvetica Neue"; color: rgba(69, 69, 69, 1) } p.p2 { margin: ...
 - java HttpClicent网络请求与解析
			
HttpClicent是Apache下的一个子项目,文档齐全,详见官网:http://hc.apache.org/httpcomponents-client-4.5.x/quickstart.html ...
 - spring boot 部署到tomcat
			
网上很多文章描述过,当我按步骤做时会抛各种错误,最后记录下我的做法(成功发布到本地 Tomcat9 ): 1.将项目的启动类Application.java继承SpringBootServletIni ...
 - .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 聚合)--学习笔记
			
2.5.5 MongoDB -- 聚合 排序 索引类型 创建索引 排序 // 升序 db.getCollection('author').find({}).sort({"age": ...
 - 一、linux安装mysql
			
一.下载mysql免编译包: wget http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.g ...
 - RMI之由浅入深(一)
			
0x01.什么是RMI RMI(Remote Method Invocation)即Java远程方法调用,RMI用于构建分布式应用程序,RMI实现了Java程序之间跨JVM的远程通信.顾名思义,远程方 ...
 - spring cache 学习 —— @Cacheable 使用详解
			
1. 功能说明 @Cacheable 注解在方法上,表示该方法的返回结果是可以缓存的.也就是说,该方法的返回结果会放在缓存中,以便于以后使用相同的参数调用该方法时,会返回缓存中的值,而不会实际执行该方 ...
 - 500 份源码合集——GitHub 热点速览 v.21.02
			
作者:HelloGitHub-小鱼干 GitHub 项目名,如同变量命名,一个好的项目名能让你一眼就知道它是什么.500-AI-Machine-learning-Deep-learning-Compu ...
 - Docker-Compose练习
			
运行一个镜像,需要添加大量的参数. 可以通过Docker-Compose编写这些参数. Docker-Compose可以帮助我们批量的管理容器. 只需要通过一个docker-compose.yml文件 ...