之前我们写好了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. 2021春季学期华清大学EE数算OJ3:岩石的重量

    原题目如下: 看起来,这不过是我们在<程序设计基础>里面接触过的简单动态规划问题(什么,你不知道什么叫动态规划? 什么是动态规划? 百度百科对"动态规划"一词定义如下: ...

  2. JavaScript中if语句优化和部分语法糖小技巧推荐

    前言 在前端日常开发过程中,if else判断语句使用的次数应该是比较频繁的了,一些较为复杂的场景,可能会用到很多判断,在某个代码块使用很多if else时,代码会显得较为冗余,阅读起来不够清晰. 除 ...

  3. 872. Leaf-Similar Trees - LeetCode

    Question 872. Leaf-Similar Trees Solution 题目大意: 如果两个二叉树的叶子节点相同就认为这两个二叉树相似.给两个二叉树判断是否相似. 思路: 用递归把两个二叉 ...

  4. linux篇-公司网络故障那些事(路由器变交换机)

    首先这次网络故障是断电引起的 我给大家画个模型 三层的为八口交换机 一层的为五口打印机 笔记本代表两台无线打印机 首先八口的连接了公司采购电脑一台,业务电脑一台,其他电脑三台 第二个五口交换的连接财务 ...

  5. K8S Flannel网络插件

    0.前言 参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件.组件.由于Kubernetes通过开放的CNI ...

  6. [NOI2011]阿狸打字机

    题意:一开始是个空串s,有三种操作:(1.末尾加一个字符 2.末尾减一个字符 3.存储该字符串) 思路: 一开始在trie树上动态加点很好处理,3操作的时候记录一下此时trie树上的pos,同时记录d ...

  7. Simple, Fast Malicious Multiparty Private Set Intersection-解读

    文本记录阅读该论文的笔记. 这是文章框架,来自视频. 介绍 本文主要解决恶意攻击下安全的多方PSI,主要用到两大技术OPPRF和OKVS,构造合谋和不合谋的协议. 基础知识 OPPRF 这部分在OPR ...

  8. 图解MySQL逻辑备份的实现流程

    1. 摘要 数据作为一家公司的重要资产,其重要程度不言而喻.数据库为数据提供存取服务,担任着重要的角色,如果因数据误删.服务器故障.病毒入侵等原因导致数据丢失或服务不可用,会对公司造成重大损失,所以数 ...

  9. 第1期 考研中有关函数的一些基本性质《zobol考研微积分学习笔记》

    在入门考研微积分中,我们先复习一部分中学学的初等数学的内容.函数是非常有用的数学工具. 1.函数的性质理解: 首先考研数学中的所有函数都是初等函数.而函数的三个关键就是定义域.值域.对应关系f. 其中 ...

  10. python基础知识-day9(库学习)

    1.os学习 1 print(os.name) #获取操作系统 2 print(os.path.exists("D:\soft\python")) #判断路径是否存在 3 prin ...