MapReduce:汇总学生表和成绩表为----学生成绩表
已知两张数据表,其中表一存储的是学生编号、学生姓名;表二存储的是学生编号、考试科目、考试成绩;编写mapreduce程序,汇总两张表数据为一张统一表格。
表一:
- A001 zhangsan
- A002 lisi
- A003 wangwu
- A004 zhaoliu
- A005 tianqi
表二:
- A001 math
- A002 math
- A003 math
- A004 math
- A005 math
- A001 english
- A002 english
- A003 english
- A004 english
- A005 english
- A001 computer
- A002 computer
- A003 computer
- A004 computer
- A005 computer
正确结果:
执行java程序,打印出part-r-00000中数据:
代码如下(由于水平有限,不保证完全正确,如果发现错误欢迎指正):
- package com;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- 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 Test {
- public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
- Configuration config = new Configuration();
- config.set("fs.defaultFS", "hdfs://192.168.0.100:9000");
- config.set("yarn.resourcemanager.hostname", "192.168.0.100");
- FileSystem fs = FileSystem.get(config);
- Job job = Job.getInstance(config);
- job.setJarByClass(Test.class);
- //设置所用到的map类
- job.setMapperClass(myMapper.class);
- job.setMapOutputKeyClass(Text.class);
- job.setMapOutputValueClass(Text.class);
- //设置用到的reduce类
- job.setReducerClass(myReducer.class);
- job.setOutputKeyClass(Text.class);
- job.setOutputValueClass(Text.class);
- //设置输入输出地址
- FileInputFormat.addInputPath(job, new Path("/day19/"));
- Path path = new Path("/output5/");
- if(fs.exists(path)){
- fs.delete(path, true);
- }
- //指定文件的输出地址
- FileOutputFormat.setOutputPath(job, path);
- //启动处理任务job
- boolean completion = job.waitForCompletion(true);
- if(completion){
- System.out.println("Job Success!");
- }
- }
- public static class myMapper extends Mapper<Object, Text, Text, Text> {
- // 实现map函数
- public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
- String temp=new String();// 左右表标识
- String values=value.toString();
- String words[]=values.split("\t");
- String mapkey = new String();
- String mapvalue = new String();
- //左表:A001,zhangsan
- if (words.length==) {
- mapkey = words[];
- mapvalue =words[];
- temp = "";
- }else{
- //右表:A001,math,80
- mapkey = words[];
- mapvalue =words[]+"="+words[];
- temp = "";
- }
- // 输出左右表
- //左表:(A001,1+zhangsan)
- //右表:(A001,2+math=80)
- context.write(new Text(mapkey), new Text(temp + "+"+ mapvalue));
- System.out.println("key:"+mapkey+"---value:"+mapvalue);
- }
- }
- //reduce解析map输出,将value中数据按照左右表分别保存
- public static class myReducer extends Reducer<Text, Text, Text, Text> {
- // 实现reduce函数
- public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
- //学生的数组
- List<String> people =new ArrayList<String>();
- //成绩的数组
- List<String> score =new ArrayList<String>();
- //(A001,{1+zhangsan,2+math=80})
- for(Text value:values){
- // 取得左右表标识
- char temp = (char) value.charAt(); //
- String words[] = value.toString().split("[+]"); //1,zhangsan
- if(temp == ''){
- people.add(words[]);
- }
- if(temp == ''){
- score.add(words[]);
- }
- }
- //遍历两次,求出笛卡尔积
- for (String p : people) {
- for (String s : score) {
- context.write(new Text(p), new Text(s));
- }
- }
- }
- }
- }
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击下方的【好文要顶】按钮【精神支持】,因为这两种支持都是使我继续写作、分享的最大动力!
MapReduce:汇总学生表和成绩表为----学生成绩表的更多相关文章
- java例题_50 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成 绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
1 /*50 [程序 50 文件 IO] 2 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成 3 绩),计算出平均成绩,将原有的数据和计算出的平均分数存放 ...
- 《MySQL数据操作与查询》- 维护学生信息、老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息
综合项目需求 一.系统整体功能 系统需支持以下功能: 维护学生信息.老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息 学生 Student(id,班级id,学号,姓名,性别,电话,地址,出 ...
- Java基础知识强化之集合框架笔记49:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)按照总分从高到低输出到控制台
1. 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)按照总分从高到低输出到控制台: 分析: A: 定义学生类 B: 创建一个TreeSet集合 C: 总分从高到底如何实现 ...
- /* * 有五个学生,每个学生有3门课的成绩,从键盘输入以上数据 *(包括学生号,姓名,三门课成绩),计算出平均成绩, *将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。 */
1.Student类:类中有五个变量,分别是学号,姓名,三门成绩 package test3; public class Student { private int num; private Stri ...
- 代码实现:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据 (包括学生号,姓名,三门课成绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.ut ...
- 【HIVE高级笔试必备题型】(组内topN、相邻行的值比较问题)求语文大于数学_/_求文科大于理科成绩的学生
Hive SQL练习之成绩分析 数据:[id, 学号,班级,科目,成绩] 1,1,1,yuwen,80 2,1,1,shuxue,85 3,2,1,yuwen,75 4,2,1,shuxue,70 5 ...
- Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化
知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...
- 【JAVA】【作业向】第一题:本学期一班级有n名学生,m门课程。现要求对每门课程的成绩进行统计:平均成绩、最高成绩、最低成绩,并统计考试成绩的分布律。
1.预备知识:动态数组Array实现: 2.解题过程需要理解的知识:吧唧吧唧吧唧吧唧 不想做了 就用了最简单的方法 和c语言类似 java版本 `import java.util.Scanner; / ...
- Java初学者作业——编写Java程序,输入一个学生的5门课程的成绩,求其平均分。
返回本章节 返回作业目录 需求说明: 编写Java程序,输入一个学生的5门课程的成绩,求其平均分.计算平均成绩,需要将每一门课程的成绩逐步累加到总成绩中,使用 for 循环实现,然后求出平均分. 实现 ...
随机推荐
- CGContextRef用法
本文转载至 http://blog.csdn.net/perfect_promise/article/details/7660220 quartz 是主要的描画接口,支持基于路径的描画. 抗锯齿渲染. ...
- 获取TXT文件,解决读取TXT乱码问题,查找所输入字是否在TXT文件中,
/// <summary> /// 查看是否存在 /// </summary> /// <param name="str"></param ...
- dubbo zookeeper报错failed to connect to server , error message is:No route to host
failed to connect to server , error message is:No route to host 转自:http://blog.csdn.net/miaohongyu1/ ...
- javascript的解析过程
引言: javascript是一种解释型的脚本语言,它不同于java或者c#这种编译语言,不需要编译成游览器可识别的语言,而是由游览器动态解析和执行的.(本身就是游览器可以直接识别,javascrip ...
- 第00章—IDEA
spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html 码云源码地址:https://gitee.com/jinxia ...
- Career Planning:Developers Best Practices Tutorial
This small tutorial is based on my past 16+ years of experience in software development industry. I ...
- window下安装mysql详细步骤
1.下载安装包 打开mysql官网下载页面:http://dev.mysql.com/downloads/mysql/ 1.选择相应的版本和平台 2.mysql配置 打开刚刚解压的文件夹F:\mysq ...
- python内存泄露查找
1 前言: 1.1 像Java程序一样,虽然Python本身也有垃圾回收的功能,但是同样也会产生内存泄漏的问题 1.2 在Python程序里,内存泄漏是由于一个长期持有的对象不断的往一个dict或者l ...
- 科班学习java遇到瓶颈,每天云里雾里怎么办?
声明:这个问题困扰了我好久,今天在知乎找到了答案.知乎链接https://www.zhihu.com/question/24240982,感谢大神@Tony He的回答. 作者:Tony He链接:h ...
- Spark 1.5新特性介绍
一.DataFrame执行后端优化(Tungsten第一阶段) DataFrame可以说是整个Spark项目最核心的部分,在1.5这个开发周期内最大的变化就是Tungsten项目的第一阶段已经完成.主 ...