Mapreduce的使用案例和join算法

手机上网流量求和

源数据:
在这里插入图片描述
需求:统计每一个用户(手机号)所耗费的总上行流量、下行流量,总流量

代码实现:

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值