之前我们写好了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输出键值对的设置的更多相关文章

  1. java中循环遍历实体类的属性和数据类型以及属性值

    package com.walkerjava.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTarg ...

  2. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...

  3. 【转】java遍历实体类的属性和数据类型以及属性值

    和同学接了个外包的活,由于项目中很多地方要用到poi导出excel,而每次导出都要写很多相同的代码,因为poi的cell.setCellValue();每次设置的都是不同实体bean的属性值,导致代码 ...

  4. java遍历实体类的属性和数据类型以及属性值

    遍历实体类的树形和数据类型一级属性值 /** * 遍历实体类的属性和数据类型以及属性值 * @param model * @throws NoSuchMethodException * @throws ...

  5. java中如何遍历实体类的属性和数据类型以及属性值

      package com.walkerjava.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTa ...

  6. map自定义键值类型

    map自定义键值类型 改变Map的默认比较方式 https://www.cnblogs.com/zjfdlut/archive/2011/08/12/2135698.html 大家知道,STL中的ma ...

  7. java map添加另一个map时候 键值对的类型要一致

    java map添加另一个map时候 键值对的类型要一致

  8. Springboot实体类转JSON报错Could not find acceptable representation & 设置访问项目根路径的默认欢迎页面

    =================实体类转JSON报错的解决办法============= 之前在springmvc的时候也报过这个错,原因以及springmvc中解决办法参考:https://www ...

  9. map集合键值对存储,键值不重复,值可以重复

    import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.Li ...

随机推荐

  1. 消息队列,IPC机制(进程间通信),生产者消费者模型,线程及相关

    消息队列 创建 ''' Queue是模块multiprocessing中的一个类我们也可以这样导入from multiprocessing import Queue,创 建时queue = Queue ...

  2. Vue路由的安装

    1.在Vue ui中插件中找到添加vue-router 2.安装以后,项目中的会自动完成配置. 3.在store中的index.js配置路由页面以及路径.

  3. 关于我学git这档子事(4)

    ------------恢复内容开始------------ 当本地分支(main/dev)比远程仓库分支(main/dev)落后几次提交时 先: git pull 更新本地仓库 再 git push ...

  4. jQuery基础入门+购物车案例详解

    jQuery是一个快速.简洁的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write Less,Do More",即倡导写更少的代码,做更多 ...

  5. MySQL之事务隔离级别和MVCC

    事务隔离级别 事务并发可能出现的问题 脏写 事务之间对增删改互相影响 脏读 事务之间读取其他未提交事务的数据 不可重复读 一个事务在多次执行一个select读到的数据前后不相同.因为被别的未提交事务修 ...

  6. 零成本搭建个人博客之图床和cdn加速

    本文属于零成本搭建个人博客指南系列 为什么要使用图床 博客文章中的图片资源文件一般采用本地相对/绝对路径引用,或者使用图床通过外链进行引用展示.本地引用的弊端我认为在于: 图片和博客放在同一个代码托管 ...

  7. SQL中的数字、字母和汉字

    知识点001 当变量的数据类型为VARCHAR时,变量赋值后,变量中的字符所占字节数,数字和字母是1个bytes,汉字是2个bytes; 当变量的数据类型为NVARCHAR时,变量赋值后,变量中的字符 ...

  8. Go微服务框架go-kratos实战03:使用 gorm 实现增删改查操作

    一.简介 在上一篇文章 go-kratos实战02 中,详细介绍了用 kratos 编写项目代码的步骤.这篇就在上篇基础上,再结合 Go 数据库操作库 gorm 一步一步来实现一个简单的增删改查操作. ...

  9. 清除 GitHub 历史记录的隐私信息

    清理 github 敏感信息 有的时候我们在提交到github上的内容不小心含有敏感代码,比如密码,公司的服务器IP等.这个时候就要通过一些手段清除这些信息. GitHub官方方案比较码放,所以推荐使 ...

  10. react-router v6对比react-router v5

    简述:     1. react-router v6 原生支持typeScript ; 安装方法 npm install react-router-dom@6    2. react-router v ...