两张数据表,表一学生编号姓名;表二生编号、考试科目、考试成绩;编写mapreduce程序,汇总两张表数据为一张统一表格

 1 package com.liuhuan;
 2
 3 import org.apache.hadoop.io.WritableComparable;
 4
 5 import java.io.DataInput;
 6 import java.io.DataOutput;
 7 import java.io.IOException;
 8
 9 public class Student implements WritableComparable<Student> {
10
11     private String userId;
12     private String userName;
13     private String km;
14     private int score;
15     private String fileName;
16
17     @Override
18     public String toString() {
19         return userName + "\t" + km + "=" + score;
20     }
21
22     public Student() {
23     }
24
25     public String getUserId() {
26         return userId;
27     }
28
29     public void setUserId(String userId) {
30         this.userId = userId;
31     }
32
33     public String getUserName() {
34         return userName;
35     }
36
37     public void setUserName(String userName) {
38         this.userName = userName;
39     }
40
41     public String getKm() {
42         return km;
43     }
44
45     public void setKm(String km) {
46         this.km = km;
47     }
48
49     public int getScore() {
50         return score;
51     }
52
53     public void setScore(int score) {
54         this.score = score;
55     }
56
57     public String getFileName() {
58         return fileName;
59     }
60
61     public void setFileName(String fileName) {
62         this.fileName = fileName;
63     }
64
65     @Override
66     public int compareTo(Student o) {
67         int i = o.userId.compareTo(this.userId);
68         if (i == 0) {
69             return o.userName.compareTo(this.userName);
70         } else {
71             return i;
72         }
73     }
74
75     @Override
76     public void write(DataOutput dataOutput) throws IOException {
77         dataOutput.writeUTF(use
 1 package com.liuhuan;
 2
 3 import org.apache.hadoop.io.WritableComparable;
 4 import org.apache.hadoop.io.WritableComparator;
 5
 6 public class StudentCompartor extends WritableComparator {
 7     public StudentCompartor() {
 8         super(Student.class,true);
 9     }
10
11     @Override
12     public int compare(WritableComparable a, WritableComparable b) {
13         Student a1 = (Student) a;
14         Student b1 = (Student) b;
15         return b1.getUserId().compareTo(a1.getUserId());
16     }
17 }


 1 package com.liuhuan;
 2
 3 import org.apache.hadoop.conf.Configuration;
 4 import org.apache.hadoop.fs.Path;
 5 import org.apache.hadoop.io.NullWritable;
 6 import org.apache.hadoop.mapreduce.Job;
 7 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
 8 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 9
10 import java.io.IOException;
11
12 public class StudentDriver {
13
14     public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
15         Configuration cfg = new Configuration();
16         Job job = Job.getInstance(cfg);
17
 1 package com.liuhuan;
 2
 3 import org.apache.hadoop.io.LongWritable;
 4 import org.apache.hadoop.io.NullWritable;
 5 import org.apache.hadoop.io.Text;
 6 import org.apache.hadoop.mapreduce.Mapper;
 7 import org.apache.hadoop.mapreduce.lib.input.FileSplit;
 8
 9 import java.io.IOException;
10
11 public class StudentMapper extends Mapper<LongWritable, Text, Student, NullWritable> {
12     String fileName;
13     Student stu = new Student();
14     @Override
15     protected void setup(Context context) throws IOException, InterruptedException {
16         FileSplit fs = (FileSplit) context.getInputSplit();
17         fileName = fs.getPath().getName();
18     }
19
20     @Override
21     protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
22         String[] split = value.toString().split("\t");
23
24         if (fileName.startsWith("student")) {
25             stu.setUserId(split[0]);
 1 package com.liuhuan;
 2
 3 import org.apache.hadoop.io.NullWritable;
 4 import org.apache.hadoop.mapreduce.Reducer;
 5
 6 import java.io.IOException;
 7 import java.util.Iterator;
 8
 9 public class StudentReduce extends Reducer<Student, NullWritable,Student, NullWritable> {
10
11     @Override
12     protected void reduce(Student key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
13         Iterator<NullWritable> it = values.iterator();
14         it.next();
15         String userName = key.getUserName();
16
17         System.err.println(key+"----");
18         while (it.hasNext()) {
19             it.next();
20             key.setUserName(userName);
21             context.write(key,NullWritable.get());
22         }
23     }
24 }

26             stu.setUserName(split[1]);
27             stu.setScore(0);
28             stu.setKm("");
29             stu.setFileName("student");
30         } else {
31             stu.setUserId(split[0]);
32             stu.setKm(split[1]);
33             stu.setScore(Integer.parseInt(split[2]));
34             stu.setFileName("score");
35             stu.setUserName("");
36         }
37         System.err.println(stu);
38         context.write(stu,NullWritable.get());
39     }
40 }
18         job.setJarByClass(StudentDriver.class);
19         job.setMapperClass(StudentMapper.class);
20         job.setReducerClass(StudentReduce.class);
21
22         job.setGroupingComparatorClass(StudentCompartor.class);
23
24         job.setMapOutputKeyClass(Student.class);
25         job.setMapOutputValueClass(NullWritable.class);
26         job.setOutputKeyClass(Student.class);
27         job.setOutputValueClass(NullWritable.class);
28
29         FileInputFormat.setInputPaths(job, new Path("C:\\Users\\83795\\Desktop\\test\\10A\\2\\input"));
30         FileOutputFormat.setOutputPath(job, new Path("C:\\Users\\83795\\Desktop\\test\\10A\\2\\output"));
31
32         boolean b = job.waitForCompletion(true);
33         System.out.println(b);
34     }
35 }
rId);
78         dataOutput.writeUTF(userName);
79         dataOutput.writeUTF(km);
80         dataOutput.writeInt(score);
81         dataOutput.writeUTF(fileName);
82     }
83
84     @Override
85     public void readFields(DataInput dataInput) throws IOException {
86         this.userId = dataInput.readUTF();
87         this.userName = dataInput.readUTF();
88         this.km = dataInput.readUTF();
89         this.score = dataInput.readInt();
90         this.fileName = dataInput.readUTF();
91     }
92 }

原文地址:https://www.cnblogs.com/xjqi/p/12654912.html

时间: 2024-08-28 09:04:53

两张数据表,表一学生编号姓名;表二生编号、考试科目、考试成绩;编写mapreduce程序,汇总两张表数据为一张统一表格的相关文章

7.13编写一程序将两个字符串连接起来,不使用stracat函数

输入的时候,注意字符串的长度. #include<stdio.h>//7.13 编写一个程序,将两个字符串连接起来,不要用strcat函数.  int main()  {      char c1[20],c2[20];      int i=0,j=0;      printf("Input string1:");      gets(c1);      printf("Input string2:");      gets(c2);      whi

MapReduce程序之实现单表关联

设计思路 分析这个实例,显然需要进行单表连接,连接的是左表的parent列和右表的child列,且左表和右表是同一个表. 连接结果中除去连接的两列就是所需要的结果--"grandchild--grandparent"表.要用MapReduce解决这个实例,首先应该考虑如何实现表的自连接:其次就是连接列的设置:最后是结果的整理. 考虑到MapReduce的shuffle过程会将相同的key会连接在一起,所以可以将map结果的key设置成待连接的列,然后列中相同的值就自然会连接在一起了.再

案例三:小明左右手分别拿两张纸牌:黑桃10和红心8,现在交换手中的牌。编写一个程序模拟这一个过程:两个整数分别保存在两个变量中,将这两个变量的值互换,并输出互换后的结果。

package project_03; /** * 2018-9-7 20:19:59 * @author Sauron XiaMen * */ public class ChangeCard { //将两个变量的值互换 public static void main(String[] args) { System.out.println("输出互换前手中的纸牌:"); int left=10; int right=8; int i=0; System.out.println(&quo

编写mapreduce程序实例——数据去重

每一行为一个日期及一个人名字,分为3个文件,其中存在多行重复数据,需要进行去重. 输入文件: file1: 2006-6-9 a 2006-6-11 b 2006-6-21 c 2006-6-10 a 2006-6-11 b 2006-6-30 e 2006-6-9 a 2006-6-26 d file2: 2006-6-9 a 2006-6-11 b 2006-6-9 a 2006-6-21 c 2006-6-11 b 2006-6-9 a 2006-6-30 e file3: 2006-6-

编写程序比较两个文件的不同

1 #编写一个程序比较两个文件的不同 2 3 print('请输入第一个文件名:',end='') 4 file1=input() 5 print('请输入第二个文件名:',end='') 6 file2=input() 7 count_line=0 8 count_times = [] 9 10 f1 = open('F:\\'+file1) 11 f2 = open('F:\\'+file2) 12 13 for f1_each_line in f1: 14 count_line += 1

(转)MapReduce 中的两表 join 几种方案简介

1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的技巧. 本文首先介绍了Hadoop上通常的JOIN实现方法,然后给出了几种针对不同输入数据集的优化方法. 2. 常见的join方法介绍 假设要进行join的数据分别来自File1和File2. 2.1 reduce side join reduce side join是一种最简单的join方式,其主

使用文档对象在页面上创建学生信息表。 信息表包括学号、姓名、性别、电子邮件、联系电话、个人主页和联系地址, 信息表内容通过表单输入,提交前先使用正则表达式进行验证,联系地址不能超过20个字符, 每输入一名学生的信息,提交后,表格增加一行,表格不能被选择、复制。

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>    </head>    <!--        描述:使用文档对象在页面上创建学生信息表.        信息表包括学号.姓名.性别.电子邮件.联系电话.个人主页和联系地址,        信息表内容通过表单输入,提交前先使用

MO拆分计划行程序中写入PRODUCTIONORDERS表数据出现重复导致报错(BUG)20180502

错误提示:ORA-00001: 违反唯一约束条件 (ABPPMGR.C0248833319_6192)ORA-06512: 在 "STG.FP_MO_SPLIT", line 199  ORA-06512: 在 "STG.FP_MO_SPLIT", line 1318 错误描述:MO拆分计划行程序中写入PRODUCTIONORDERS表数据出现重复导致报错(BUG) 存储过程:FP_MO_SPLIT 解决方法: 原文地址:https://www.cnblogs.co

用程序实现SQL的表导出

公司里面对公用数据库的访问有很多限制,因为涉及到性能问题.一般程序用到的就只有几张表.为了更自由地访问数据,一般都需要作数据导出. 用程序实现数据导出,有以下几个问题: 1 数据丢失 用程序导数据,特别是增量导数据,是容易丢失数据的.我的处理方法是利用数据库表的AddTime字段.每次增量导入时,从dest表中取得最大时间,如果不存在(空表),则指定人工指定一个时间点.导入的时间要比最大时间小几秒钟,我定义的是5秒. 2 数据插入冲突 数据插入冲突也是比较容易出现的问题,解决方法是Insert