PhoneBean实体类的封装和map输出键值对的设置
之前我们写好了bean类型。现在我们再看看这个需求中,map和reduce各自的流程。
Map阶段:
字段切分以后保留如下字段:以第一行为例,就保留13726230503112 2481 24681 字段
将数据封装到PhoneBean里面
将手机号设置成keyout
将PhoneBean设置成valueout
Reduce阶段:
reduce阶段自动将相同手机号的数据聚合
map(
key (手机号):13726230503112
value(实体类):{
phoneNumber:13726230503112
upflow:2481
downflow:24681
}
)
然后key值相同(同一个手机号)的数据放到一起,统计上行流量总和,下行流量总和,总流量和,
keyout:手机号
valueout:PhoneBean对象
这样我们就能以手机号为key值,一个实体类为value的键值对输出结果。
新建一个FlowMapper类,我们在这个类中封装phonebean和设置map阶段的keyout,valueout值
代码如下:
package MR.phone;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
//map阶段valueout是一个实体类
public class FlowMapper extends Mapper<LongWritable, Text,Text,PhoneBean> {
Text keyout=new Text();
PhoneBean valueout=new PhoneBean();
//重写map方法
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, PhoneBean>.Context context) throws IOException, InterruptedException {
//获取一行值,切分数据,获取想要的字段,封装到phone Flow
//1,获取一行数据,转换成字符串
String line = value.toString();
//源文件里面的字段以\t制表符切分,我们就以\t来切割
//2,切割字段
String[] split = line.split("\t");
//去除想要的数据,封装到对象里面
//1363157985066 13726230503112 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 24 27 2481 24681 200
//这个集合里面的第二个是手机号
//3,取出想要的数据
String phoneNum=split[1];
// 倒数第三个是上行流量
long upFlow=Long.parseLong(split[split.length-3]);
//倒数第二个是下行流量
long downFlow=Long.parseLong(split[split.length-2]);
//4,封装对象
valueout.setUpFlow(upFlow);
valueout.setDownFlow(downFlow);
valueout.setSumFlow(upFlow+downFlow);
valueout.setPhoneNUmber(phoneNum);
//写出数据
keyout.set(phoneNum);
context.write(keyout,valueout);
}
}
这里我们主要实现了两大功能,第一:封装了bean。第二:设置手机号为map的keyout值,以bean对象为valueout,也就是这样:
到这里,map就写完了。
PhoneBean实体类的封装和map输出键值对的设置的更多相关文章
- java中循环遍历实体类的属性和数据类型以及属性值
package com.walkerjava.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTarg ...
- java中遍历实体类,获取属性名和属性值
方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...
- 【转】java遍历实体类的属性和数据类型以及属性值
和同学接了个外包的活,由于项目中很多地方要用到poi导出excel,而每次导出都要写很多相同的代码,因为poi的cell.setCellValue();每次设置的都是不同实体bean的属性值,导致代码 ...
- java遍历实体类的属性和数据类型以及属性值
遍历实体类的树形和数据类型一级属性值 /** * 遍历实体类的属性和数据类型以及属性值 * @param model * @throws NoSuchMethodException * @throws ...
- java中如何遍历实体类的属性和数据类型以及属性值
package com.walkerjava.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTa ...
- map自定义键值类型
map自定义键值类型 改变Map的默认比较方式 https://www.cnblogs.com/zjfdlut/archive/2011/08/12/2135698.html 大家知道,STL中的ma ...
- java map添加另一个map时候 键值对的类型要一致
java map添加另一个map时候 键值对的类型要一致
- Springboot实体类转JSON报错Could not find acceptable representation & 设置访问项目根路径的默认欢迎页面
=================实体类转JSON报错的解决办法============= 之前在springmvc的时候也报过这个错,原因以及springmvc中解决办法参考:https://www ...
- map集合键值对存储,键值不重复,值可以重复
import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.Li ...
随机推荐
- spring boot redis 写入异常
redis 的 key value 使用 json 序列化.反序列化时,写入的 bean 不能是 final 类型的类,否则无法解析
- 521. Longest Uncommon Subsequence I - LeetCode
Question 521. Longest Uncommon Subsequence I Solution 题目大意:给两个字符串,找出非共同子串的最大长度 思路:字符串相等就返回-1,不等就返回长度 ...
- 01C语言基础(二)
Day07 笔记 指针和函数: 栈 帧: 当函数调用时,系统会在 stack 空间上申请一块内存区域,用来供函数调用,主要存放 形参 和 局部变量(定义在函数内部). 当函数调用结束,这块内存区域自动 ...
- Spring Authorization Server 0.3.0 发布,官方文档正式上线
基于OAuth2.1的授权服务器Spring Authorization Server 0.3.0今天正式发布,在本次更新中有几大亮点. 文档正式上线 Spring Authorization Ser ...
- 从零搭建react+ts组件库(封装antd)
为什么会有这样一篇文章?因为网上的教程/示例只说了怎么做,没有系统详细的介绍引入这些依赖.为什么要这样配置,甚至有些文章还是错的!迫于技术洁癖,我希望更多的开发小伙伴能够真正的理解一个项目搭建各个方面 ...
- 存储器、I/O组织、微处理器
重点知识 存储器的内部结构及访问方法 存储器分段以及存储器中的逻辑地址和物理地址 I/O端口组织及编址方式 时序和总线操作以及系统的工作方式和特点. 存储器组织 8086有20根地址线,可寻址的存储器 ...
- 二进制固件函数劫持术-DYNAMIC
背景介绍 固件系统中的二进制文件依赖于特定的系统环境执行,针对固件的研究在没有足够的资金的支持下需要通过固件的模拟来执行二进制文件程序.依赖于特定硬件环境的固件无法完整模拟,需要hook掉其中依赖于 ...
- 浅析 2D 组态与 2.5D 组态的区别 | 空调装配生产线与化工安全流程
前言 为了更有效辨别 2D 与 2.5D 之间的区别,图扑软件选用 2D 空调装配生产线与 2.5D 化工厂安全流程作比较.通过自主研发的 HT 产品,采用 B/S 架构快速搭建零代码拖拽式 Web ...
- PyTorch - torch.eq、torch.ne、torch.gt、torch.lt、torch.ge、torch.le
PyTorch - torch.eq.torch.ne.torch.gt.torch.lt.torch.ge.torch.le 参考:https://flyfish.blog.csdn.net/art ...
- 编程技巧│浏览器 Notification 桌面推送通知
目录 一.什么是 Notification 二.弹窗授权 三.弹窗使用 四.浏览器支持检测 五.授权回调 六.3秒后关闭弹窗 一.什么是 Notification Notification 是浏览器最 ...