之前我们写好了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. MinGW 和 TDM 的问题

    目前遇到的一个小问题就是批量声明时的初始化. mingw gcc 9.2:不支持int a,b,c=5; 所得数为a=0 b=0 c=5. 而在TDM gcc 5.1中,可以同时赋值. 第二个问题,T ...

  2. Spring Boot下Spring Batch入门实例

    一.About Spring Batch是什么能干什么,网上一搜就有,但是就是没有入门实例,能找到的例子也都是2.0的,看文档都是英文无从下手~~~,使用当前最新的版本整合网络上找到的例子. 关于基础 ...

  3. FreeMarker速查手册

    一.开始 原理图 引入FreeMarker依赖 <dependency> <groupId>org.freemarker</groupId> <artifac ...

  4. Typora详细教程以及下载

    ​ 发现一篇非常不错的 Typora 教程,分享给大家. 原文链接:https://www.cnblogs.com/hyacinthLJP/p/16123932.html 作者:MElephant T ...

  5. 一文学完Linux Shell编程,比书都好懂

    一. Shell 编程 1. 简介 Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务. Shell 既是一种命令语言,又是一种程序设计语言. Shell scr ...

  6. 题解 P1276 校门外的树(增强版)

    前言 本蒟蒻重学线段树,发现了这道题可以用线段树做. 虽然数据范围很小可以直接暴力,但由于在练习线段树所以打算用线段树写这道题. 本题解针对已经有线段树基础的巨佬,不懂线段树原理的话可以学习线段树后再 ...

  7. docker安装RabbitMQ及安装延迟插件

    我这个安装攻略首先得保证服务器上安装过docker了 如果没安装docker请先去安装docker 1.首先说一下什么是MQ MQ(message queue)字面意思上来说消息队列,FIFO先入先出 ...

  8. python自动将新生成的报告作为附件发送并进行封装

    发送报告作为自动化部署来讲是一个重要的环节,废话不多说直接上代码吧,如果想更细致的了解内容查阅本博主上篇基本发送文章 特别叮嘱一下:SMTP协议默认端口25,qq邮箱SMTP服务器端口是465 别出丑 ...

  9. CabloyJS V3.2.0支持Socket IO

    CabloyJS v3.2.0引入了Socket IO,并且实现了统一的在线推送和离线推送机制 效果演示 1. IM 用户向系统发送一条消息,系统通过websocket在线通道向用户推送一条回复 2. ...

  10. 点亮Arduino内置的LED灯

    更新记录 2022年4月16日:本文迁移自Panda666原博客,原发布时间:2021年9月3日. 15块软妹币的板子镇楼. 上一篇配置好了开发环境,然后就开始搞第一个小灯的实验了. 原理相当的简单, ...