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

Posted xjqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两张数据表,表一学生编号姓名;表二生编号考试科目考试成绩;编写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 + "	" + 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("	");
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 }

 

以上是关于两张数据表,表一学生编号姓名;表二生编号考试科目考试成绩;编写mapreduce程序,汇总两张表数据为一张统一表格的主要内容,如果未能解决你的问题,请参考以下文章

excel两张表筛选取数据

MySQL

MySQL高级

关系与外键约束

练习. SQL--学生教师分数

sql 语句编写 查询参加全部科目考试的学生及其成绩 201601 张三 语文 82