手机上网流量求和
源数据:
需求:统计每一个用户(手机号)所耗费的总上行流量、下行流量,总流量
代码实现:
FlowNum:
public class FlowNum implements Writable {
private Integer upFlow ;
private Integer downFlow;
private Integer upCountFlow ;
private Integer downCountFlow ;
/**
* 序列化的方法
* @param out
* @throws IOException
*/
@Override
public void write(DataOutput out) throws IOException {
out.write(upFlow);
out.write(downFlow);
out.write(upCountFlow);
out.write(downCountFlow);
}
public void readFields(DataInput in) throws IOException {
//反序列化
this.upFlow= in.readInt();
this.downFlow=in.readInt();
this.upCountFlow=in.readInt();
this.downCountFlow=in.readInt();
}
public Integer getUpFlow() {
return upFlow;
}
public void setUpFlow(Integer upFlow) {
this.upFlow = upFlow;
}
public Integer getDownFlow() {
return downFlow;
}
public void setDownFlow(Integer downFlow) {
this.downFlow = downFlow;
}
public Integer getUpCountFlow() {
return upCountFlow;
}
public void setUpCountFlow(Integer upCountFlow) {
this.upCountFlow = upCountFlow;
}
public Integer getDownCountFlow() {
return downCountFlow;
}
public void setDownCountFlow(Integer downCountFlow) {
this.downCountFlow = downCountFlow;
}
@Override
public String toString() {
return upFlow+"\t"+downFlow+"\t"+upCountFlow+"\t"+downCountFlow;
}
}
FlowNumMapper:
public class FlowNumMapper extends Mapper<LongWritable, Text,Text,FlowNum> {
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String [] split = value.toString().split("\t");
String phoneNum = split[1];
Integer upFlow = Integer.parseInt(split[6]);
Integer downFlow= Integer.parseInt(split[7]);
Integer upCountFlow =Integer.parseInt(split[8]);
Integer downCountFlow = Integer.parseInt(split[9]);
FlowNum flowNum = new FlowNum();
flowNum.setUpFlow(upFlow);
flowNum.setDownFlow(downFlow);
flowNum.setUpCountFlow(upCountFlow);
flowNum.setDownCountFlow(downCountFlow);
context.write(new Text(phoneNum),flowNum);
}
}
FlowNumReducer:
public class FlowNumReducer extends Reducer<Text,FlowNum,Text,FlowNum>{
@Override
protected void reduce(Text key, Iterable<FlowNum> values, Context context) throws IOException, InterruptedException {
int upFlow = 0;
int downFlow = 0;
int upCountFlow = 0;
int downCountFlow = 0;
for (FlowNum value : values){
upFlow += value.getUpFlow();
downFlow += value.getDownFlow();
upCountFlow += value.getUpCountFlow();
downCountFlow += value.getDownCountFlow();
}
FlowNum flowNum = new FlowNum();
flowNum.setUpFlow(upFlow);
flowNum.setDownFlow(downFlow);
flowNum.setUpCountFlow(upCountFlow);
flowNum.setDownFlow(downCountFlow);
context.write(key , flowNum);
}
}
FlowNumMain:
public class FlowNumMain extends Configured implements Tool {
@Override
public int run(String[] args) throws Exception {
Job job = Job.getInstance(super.getConf(),"sort");
job.setInputFormatClass(TextInputFormat.class);
TextInputFormat.addInputPath(job,new Path("file:///D:\\ABC"));
job