现在有一堆关于手机号的数据,需要从中获取每个手机号对应的上行流量,下行流量,以及总流量(总流量=上行流量+下行流量)
这个案例Mapper阶段代码:Mapper阶段代码
这个案例自定义Bean对象阶段代码:自定义Bean阶段代码
具体Reducer阶段代码如下:
public class FlowCountReducer extends Reducer<Text,FlowBean,Text,FlowBean>{
FlowBean v = new FlowBean();
//这里只需要创建FlowBean对象,因为reducer阶段只需要对value进行操作,
//key还是原来从mapper传过来的key,直接提交即可
//重写reduce方法
protected void reduce (Text,Iterable<FlowBean>,Context context) throws IOException{
//到这里是从reduce段接收的数据只有手机号,上行流量,下行流量
long sum_upFlow=0; //定义求和变量时一定要赋值 0
long sum_downFlow=0;
// 1. 累加求和
for(FlowBean flowBean : values){
sum_upFlow+=flowBean.getUpFlow();
sum_downFlow+=flowBean.getDownFlow();
}
v.set(sum_upFlow,sum_downFlow); //定义了一个求和的set方法,这里调用的是FlowBean的求和方法set
// 2. 写出
context.write(key,v);
}
}
Reducer 阶段就两大步骤:
- 累加求和;
- 写出;