员工数据
孙悟空 23 西游部 筋斗云 武松 33 水浒部 醉拳 关胜 32 水浒部 大刀 猪八戒 21 西游部 吃吃吃 贾宝玉 21 红楼部 呵呵 林黛玉 16 红楼部 嘻嘻 沙僧 25 西游部 潜水 王熙凤 46 红楼部
提示:有一个员工缺少一个技能属性字段
学习内容:现根据员工的组别进行自然排序,之后按照年龄排序实体类
import org.apache.hadoop.io.WritableComparable; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; public class Employees implements WritableComparable{ private String name; private int age; private String department; private String skill; public Employees() { super(); } public Employees(String name, int age, String department, String skill) { this.name = name; this.age = age; this.department = department; this.skill = skill; } public void setEmployees(String name, int age, String department) { this.skill=""; this.name = name; this.age = age; this.department = department; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } public String getSkill() { return skill; } public void setSkill(String skill) { this.skill = skill; } @Override public void write(DataOutput out) throws IOException { out.writeUTF(name); out.writeInt(age); out.writeUTF(department); out.writeUTF(skill); } @Override public void readFields(DataInput in) throws IOException { System.out.println("序列化————————————————————————————————————————————————"); this.name=in.readUTF(); this.age=in.readInt(); this.department=in.readUTF(); this.skill=in.readUTF(); } @Override public String toString() { return name + 't'+ +age +'t'+ department + 't' + skill ; } @Override public int compareTo(Employees o) { //先根据第一个组别进行判断,现根据组别自然排序,在进行年龄排序 int i = this.department.compareTo(o.department); if (0 ==i){ return Integer.valueOf(this.age).compareTo(o.age); } return i; } }
Mapper
import mapreduce.entity.Employees; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; public class Mapper_sort_group extends MapperReduce{ @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { Employees employees = new Employees(); String line = value.toString(); String [] split = line.split("t"); if (split.length==4){ employees.setName(split[0]); employees.setAge((int) Long.parseLong(split[1])); employees.setDepartment(split[2]); employees.setSkill(split[3]); }else { employees.setEmployees(split[0], (int) Long.parseLong(split[1]),split[2]); } context.write(employees,new Text()); } }
import mapreduce.entity.Employees; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; public class Reduce_sort_group extends Reducer启动类{ @Override protected void reduce(Employees key, Iterable values, Context context) throws IOException, InterruptedException { context.write(key,new Text()); } }
import mapreduce.entity.Employees;
import mapreduce.tools.UtilsMapReduce;
import org.apache.hadoop.fs.Path;
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 Driver_sort_group {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Job job = UtilsMapReduce.getJob("Driver_group");
job.setJarByClass(Driver_sort_group.class);
//关联mapper和reduce
job.setMapperClass(Mapper_sort_group.class);
job.setReducerClass(Reduce_sort_group.class);
//设置map输出额Kv类型
job.setMapOutputKeyClass(Employees.class);
job.setMapOutputValueClass(Text.class);
//设置最终输出的KV类型
job.setOutputKeyClass(Employees.class);
job.setOutputValueClass(Text.class);
//设置输入路径和输出路径
FileInputFormat.setInputPaths(job,new Path("input2\employees"));
FileOutputFormat.setOutputPath(job,new Path("output\employees_sort_group"));
//7.提交job
boolean result =job.waitForCompletion(true);
System.exit(result?0:1);
}
}
结果
关胜 32 水浒部 大刀 武松 33 水浒部 醉拳 林黛玉 16 红楼部 嘻嘻 贾宝玉 21 红楼部 呵呵 王熙凤 46 红楼部 猪八戒 21 西游部 吃吃吃 孙悟空 23 西游部 筋斗云 沙僧 25 西游部 潜水



