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);
    }
}
相关文章
|
存储 SQL 分布式计算
Map-Reduce 思想在 ABAP 编程中的一个实际应用案例
Map-Reduce 思想在 ABAP 编程中的一个实际应用案例
|
2月前
编写一个函数
【7月更文挑战第5天】编写一个函数。
20 2
|
3月前
|
Python
在Python中,`map()`, `filter()` 和 `reduce()` 是函数式编程中的三个核心高阶函数。
【6月更文挑战第24天】Python的`map()`应用函数到序列元素,返回新序列;`filter()`筛选满足条件的元素,生成新序列;`reduce()`累计操作序列元素,返回单一结果。
32 3
|
4月前
|
存储 Python
【Python 基础】解释reduce函数的工作原理
【5月更文挑战第6天】【Python 基础】解释reduce函数的工作原理
|
4月前
|
存储 Python
介绍Python中的函数式编程工具,如`map`、`filter`和`reduce`。
介绍Python中的函数式编程工具,如`map`、`filter`和`reduce`。
46 3
|
4月前
|
Python
Python函数式编程,map(), filter() 和 reduce() 函数的作用是什么?
Python函数式编程,map(), filter() 和 reduce() 函数的作用是什么?
63 4
|
4月前
|
Java 数据格式
手写WordCount示例编写
手写WordCount示例编写
29 0
|
10月前
|
流计算
reduce补充二
reduce补充二
38 0
|
Python
【Python基础】reduce函数详解
【Python基础】reduce函数详解
1024 1
|
Python
一步到位!Python中Reduce函数轻松解决复杂数据聚合
一步到位!Python中Reduce函数轻松解决复杂数据聚合
111 0