Reduce 端程序编写

简介: Reduce 端程序编写

首先编写 Reduce 端编程框架,自定义的 FlowSumReducer 需要继承父类 Reducer,输入数据和输出数据都是**KV 对**的形式。具体框架代码如下:


publicclassFlowSumReducerextendsReducer<Text, FlowBean, Text, FlowBean> {
}


- **KEYIN**:对应 Mapper 端输出的 KEYOUT,即每个手机号,所以是 String,对应 Hadoop 中的 Text

- **VALUEIN**:对应 Mapper 端输出的 VALUEOUT,即封装的流量信息类,所以是 FlowBean

- **KEYOUT**:用户自定义逻辑方法返回数据中key的类型,由用户业务逻辑决定,在此程序中,我们输出的key是手机号,所以是String,对应 Hadoop 中的 Text

- **VALUEOUT**:用户自定义逻辑方法返回数据中value的类型,由用户业务逻辑决定,在此程序中,我们输出的value是累加求和后封装的流量信息类,所以是 FlowBean


 已知 Reducer 中的业务逻辑写在 **reduce() 方法**中,在此 reduce()方法中我们需要接收 MapTask 的输出结果,然后按照 key(手机号) 对 value(上行流量、下行流量) 做**汇总操作**。具体代码如下所示:


@Overrideprotectedvoidreduce(Textkey, Iterable<FlowBean>values,
Reducer<Text, FlowBean, Text, FlowBean>.Contextcontext) throwsIOException, InterruptedException {
longsumUpFlow=0L; // 总上行流量longsumDownFlow=0L; // 总下行流量for (FlowBeanfb : values) {
sumUpFlow+=fb.getUpFlow();
sumDownFlow+=fb.getDownFlow();
    }
// 获取总上行流量和总下行流量,对其进行封装FlowBeanresultsum=newFlowBean(sumUpFlow, sumDownFlow);
// 将手机号作为key,将封装的流量信息类作为value,写出最终结果context.write(key, resultsum);
}


FlowSumReducer.java 的完整代码如下所示:


publicclassFlowSumReducerextendsReducer<Text, FlowBean, Text, FlowBean> {
/** * 框架每传递一组数据<13502468823,{FlowBean,FlowBean,FlowBean...}>调用一次reduce方法* reduce中的业务逻辑是遍历values,然后进行累加求和后输出*/@Overrideprotectedvoidreduce(Textkey, Iterable<FlowBean>values,
Reducer<Text, FlowBean, Text, FlowBean>.Contextcontext) throwsIOException, InterruptedException {
longsumUpFlow=0L; // 总上行流量longsumDownFlow=0L; // 总下行流量for (FlowBeanfb : values) {
sumUpFlow+=fb.getUpFlow();
sumDownFlow+=fb.getDownFlow();
        }
// 获取总上行流量和总下行流量,对其进行封装FlowBeanresultsum=newFlowBean(sumUpFlow, sumDownFlow);
// 将手机号作为key,将封装的流量信息类作为value,写出最终结果context.write(key, resultsum);
    }
}
相关文章
|
9月前
|
索引
11 # 手写 reduce 方法
11 # 手写 reduce 方法
103 0
|
7月前
编写一个函数
【7月更文挑战第5天】编写一个函数。
46 2
|
8月前
|
Python
在Python中,`map()`, `filter()` 和 `reduce()` 是函数式编程中的三个核心高阶函数。
【6月更文挑战第24天】Python的`map()`应用函数到序列元素,返回新序列;`filter()`筛选满足条件的元素,生成新序列;`reduce()`累计操作序列元素,返回单一结果。
53 3
|
9月前
|
Python
Python函数式编程,map(), filter() 和 reduce() 函数的作用是什么?
Python函数式编程,map(), filter() 和 reduce() 函数的作用是什么?
82 4
|
索引
reduce的介绍及用法
reduce的介绍及用法
167 0
|
Python
一步到位!Python中Reduce函数轻松解决复杂数据聚合
一步到位!Python中Reduce函数轻松解决复杂数据聚合
155 0
|
前端开发
前端学习案例1-一个关于reduce的问题
前端学习案例1-一个关于reduce的问题
68 0
前端学习案例1-一个关于reduce的问题
|
前端开发
前端学习案例2-一个关于reduce的问题2
前端学习案例2-一个关于reduce的问题2
73 0
前端学习案例2-一个关于reduce的问题2
|
前端开发
前端学习案例3-reduce问题
前端学习案例3-reduce问题
70 0
前端学习案例3-reduce问题
|
前端开发
前端学习案例-reduce的问题1
前端学习案例-reduce的问题1
155 0
前端学习案例-reduce的问题1