之前我们写好了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. kali linux安装后乱码的解决方法

    操作系统是5.3 解决方法是在终端执行命令: sudo apt-get install ttf-wqy-zenhei

  2. CSAPP 之 AttackLab 详解

    前言 本篇博客将会介绍 CSAPP 之 AttackLab 的攻击过程,利用缓冲区溢出错误进行代码注入攻击和 ROP 攻击.实验提供了以下几个文件,其中 ctarget 可执行文件用来进行代码注入攻击 ...

  3. ubuntu helpers

    linux 命令大全 Apt proxy configuration on Ubuntu 20.04 Focal Fossa Linux 临时使用socks代理apt-get的方法 docker - ...

  4. Nvidia Triton使用教程:从青铜到王者

    1 相关预备知识 模型:包含了大量参数的一个网络(参数+结构),体积10MB-10GB不等 模型格式:相同的模型可以有不同的存储格式(可类比音视频文件),目前主流有torch.tf.onnx和trt, ...

  5. Redis设计与实现3.2:Sentinel

    Sentinel哨兵 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 哨兵:监视.通知.自动故障恢复 启动与初始化 Sentinel 的本质只是一个运行在特殊模 ...

  6. python将test01文件夹中的文件剪切到test02文件夹中

    将test01文件夹中的文件剪切到test02文件夹中 import shutil import os def remove_file(old_path, new_path): print(old_p ...

  7. SQL Server 2019企业版和标准版的区别?

    来源公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485400&idx=1&a ...

  8. centos6搭建mysql

    目前CentOS6.5及一下版本基本上被官方给放弃更新了,但是考虑到忠实粉丝迟迟不肯放手,所以还留了入口但是非常有限 1.搭建mysql 可参照:https://blog.csdn.net/huang ...

  9. LOJ数列分块 9 题解

    \(1.\) 题意 给定一个长度 \(n\) 序列,每次查询区间 \(l, r\) 的众数. \(2.\) 思路 如果边界是 \([l,r]\),\(l\) 在第 \(a\) 块,\(r\) 在第 \ ...

  10. 关于一次Web线下面试的思考

    前言: 今天面试一家Web前端的公司,由于跟初筛的面试官关系挺好,按理来说我在第一次线上面试就应该被淘汰了(呜呜呜),接下来是线下面试,不出意外的话,我凉了.但是这些天的面试经验并非全无收获.我的线下 ...