大数据培训课程之序列化案例实操

news2024/11/25 10:55:28

序列化案例实操

1.    需求

统计每一个手机号耗费的总上行流量、下行流量、总流量

(1)输入数据

(2)输入数据格式:

7      13560436666     120.196.100.99           1116          954                   200 id      手机号码           网络ip                        上行流量  下行流量     网络状态码

(3)期望输出数据格式

13560436666             1116                954                          2070 手机号码               上行流量        下行流量                  总流量

2.需求分析

3.编写MapReduce程序

(1)编写流量统计的Bean对象

package com.atguigu.mapreduce.flowsum; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.Writable;   // 1 实现writable接口 public class FlowBean implements Writable{     private long upFlow;   private long downFlow;   private long sumFlow;     //2  反序列化时,需要反射调用空参构造函数,所以必须有   public FlowBean() {       super();   }     public FlowBean(long upFlow, long downFlow) {       super();       this.upFlow = upFlow;       this.downFlow = downFlow;       this.sumFlow = upFlow + downFlow;   }     //3  写序列化方法   @Override   public void write(DataOutput out) throws IOException {       out.writeLong(upFlow);       out.writeLong(downFlow);       out.writeLong(sumFlow);   }     //4 反序列化方法   //5 反序列化方法读顺序必须和写序列化方法的写顺序必须一致   @Override   public void readFields(DataInput in) throws IOException {       this.upFlow  = in.readLong();       this.downFlow = in.readLong();       this.sumFlow = in.readLong();   }     // 6 编写toString方法,方便后续打印到文本   @Override   public String toString() {       return upFlow + “\t” + downFlow + “\t” + sumFlow;   }     public long getUpFlow() {       return upFlow;   }     public void setUpFlow(long upFlow) {       this.upFlow = upFlow;   }     public long getDownFlow() {       return downFlow;   }     public void setDownFlow(long downFlow) {       this.downFlow = downFlow;   }     public long getSumFlow() {       return sumFlow;   }     public void setSumFlow(long sumFlow) {       this.sumFlow = sumFlow;   } }

(2)编写Mapper类

package com.atguigu.mapreduce.flowsum; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper;   public class FlowCountMapper extends Mapper<LongWritable, Text, Text, FlowBean>{     FlowBean v = new FlowBean();   Text k = new Text();     @Override   protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {             // 1 获取一行       String line = value.toString();             // 2 切割字段       String[] fields = line.split(“\t”);             // 3 封装对象       // 取出手机号码       String phoneNum = fields[1];         // 取出上行流量和下行流量       long upFlow = Long.parseLong(fields[fields.length – 3]);       long downFlow = Long.parseLong(fields[fields.length – 2]);         k.set(phoneNum);       v.set(downFlow, upFlow);             // 4 写出       context.write(k, v);   } }

(3)编写Reducer类

package com.atguigu.mapreduce.flowsum; import java.io.IOException; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer;   public class FlowCountReducer extends Reducer<Text, FlowBean, Text, FlowBean> {     @Override   protected void reduce(Text key, Iterable<FlowBean> values, Context context)throws IOException, InterruptedException {         long sum_upFlow = 0;       long sum_downFlow = 0;         // 1 遍历所用bean,将其中的上行流量,下行流量分别累加       for (FlowBean flowBean : values) {          sum_upFlow += flowBean.getUpFlow();          sum_downFlow += flowBean.getDownFlow();       }         // 2 封装对象       FlowBean resultBean = new FlowBean(sum_upFlow, sum_downFlow);             // 3 写出       context.write(key, resultBean);   } }

(4)编写Driver驱动类

package com.atguigu.mapreduce.flowsum; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;   public class FlowsumDriver {     public static void main(String[] args) throws IllegalArgumentException, IOException, ClassNotFoundException, InterruptedException {       // 输入输出路径需要根据自己电脑上实际的输入输出路径设置 args = new String[] { “e:/input/inputflow”, “e:/output1” };         // 1 获取配置信息,或者job对象实例       Configuration configuration = new Configuration();       Job job = Job.getInstance(configuration);         // 6 指定本程序的jar包所在的本地路径       job.setJarByClass(FlowsumDriver.class);         // 2 指定本业务job要使用的mapper/Reducer业务类       job.setMapperClass(FlowCountMapper.class);       job.setReducerClass(FlowCountReducer.class);         // 3 指定mapper输出数据的kv类型       job.setMapOutputKeyClass(Text.class);       job.setMapOutputValueClass(FlowBean.class);         // 4 指定最终输出的数据的kv类型       job.setOutputKeyClass(Text.class);       job.setOutputValueClass(FlowBean.class);             // 5 指定job的输入原始文件所在目录       FileInputFormat.setInputPaths(job, new Path(args[0]));       FileOutputFormat.setOutputPath(job, new Path(args[1]));         // 7 将job中配置的相关参数,以及job所用的java类所在的jar包, 提交给yarn去运行       boolean result = job.waitForCompletion(true);       System.exit(result ? 0 : 1);   } }

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编辑器实现思路

复杂项目 业务的复杂性: 交互的复杂性数据结构和状态的复杂性,例如级联选择器需要遍历树结构,还有一些需要链表、栈、队列等多项目依赖,工程的复杂性性能优化流程的复杂性 git flowlint 工具单元测试commit信息Code ReviewCI/CD开发一个编辑器 例如低代码的编辑器 编辑器…

如何批量旋转图片?学会这三种方法就能轻松实现

对于喜爱拍照的小伙伴来说&#xff0c;你们的手机或者相机应该有很多图片素材吧。那么在整理这些图片到电脑的时候&#xff0c;你们的图片会不会出现方向不一致的情况呢&#xff1f;有的是倒着的&#xff0c;有的是左旋了90。想要将这些图片都调整为同一个方向&#xff0c;靠手…

Delete `␍` 最简单最有效的解决方法和解释(VScode)

一、原因 VScode 出现 Delete ␍ 的原因&#xff0c;大部分都是因为安装了 Prettier 插件指定了文件的结尾换行符与系统不一致导致的&#xff0c;就是下面这个插件 由于历史原因&#xff0c;windows 和 linux 两个系统的文本文件的换行符不一致&#xff1b;Windows在换行的时候…

空域图像增强-图像灰度变换

1.图像灰度变换。自选一张图片&#xff0c;完成以下图像处理&#xff1a;①显示图像的灰度直方图&#xff1b;②直方图均衡化&#xff0c;对比变化前后的图像和灰度直方图&#xff1b;③对图像进行线性灰度变换&#xff0c;对某部分灰度值进行扩展&#xff0c;压缩其它灰度值区…

汽车空调器前缸盖数控加工工艺的制订及夹具设计

目  录 摘  要 &#xff11; Abstract 2 1 引言 3 2 零件的分析 4 2.1 零件的作用 4 2.1.1空调压缩机的功用和要求 4 2.1.2 汽车空调压缩机的一般结构 4 2.1.3 斜盘式压缩机的结构特点 4 2.1.4 斜盘式压缩机的优点 5 2.2 零件的工艺分析 5 3 数控机床的加工性能分析 10 3.1…

[附源码]计算机毕业设计JAVA校园跑腿系统

[附源码]计算机毕业设计JAVA校园跑腿系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

2023年软考备考,系统分析师知识点速记,速看

2023上半年软考系统分析师知识点速记分享给大家&#xff0c;快来一起打卡学习吧&#xff01; 1、企业集成分类&#xff1a;按组织范围分 2、企业集成分类&#xff1a;按集成点分 3、企业战略与信息化战略集成方法 业务与IT整合&#xff08;BITA&#xff09;&#xff1a;重心是…

计算机组成原理习题课第三章-4(唐朔飞)

计算机组成原理习题课第三章-4&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

计算机网络——OSI参考模型

计算机网络的分层结构 OSI参考模型 世界上第一个提出网络结构的公司IBM公司&#xff0c;其他的公司有美国国防部提出的TCP/IP 为了支持不同的网络结构的互联互通&#xff0c;国际标准化组织于1984年提出的开放的系统互联&#xff08;OSI&#xff09;参考模型。 OSI参考模型在…

光栅莫尔信号四倍频细分电路模块的设计与仿真研究

笔者电子信息专业硕士毕业&#xff0c;获得过多次电子设计大赛、大学生智能车、数学建模国奖&#xff0c;现就职于南京某半导体芯片公司&#xff0c;从事硬件研发&#xff0c;电路设计研究。对于学电子的小伙伴&#xff0c;深知入门的不易&#xff0c;特开次博客交流分享经验&a…

Kafka是什么?

简介&#xff1a; Kafka 是⼀种高吞吐量、分布式、基于发布/订阅的消息系统&#xff0c;最初由 LinkedIn公司开发&#xff0c;使⽤Scala语⾔编写&#xff0c;⽬前是 Apache 的开源项⽬。broker&#xff1a;Kafka 服务器&#xff0c;负责消息存储和转发topic&#xff1a;消息类别…

地理知识:墨卡托坐标系

1 介绍 等角圆柱形地图投影法 假设地球被围在一个中空的圆柱里&#xff0c;其赤道与圆柱相接触&#xff0c;然后再假想地球中心有一盏灯&#xff0c;把球面上的图形投影到圆柱体上&#xff0c;再把圆柱体展开&#xff0c;这就是一幅标准纬线为零度&#xff08;即赤道&#xff…

论文阅读-----使用可分离脚印的x射线3D CT向前和向后投影

Long Y , Fessler J A , Balter J M . 3D Forward and Back-Projection for X-Ray CT Using Separable Footprints[J]. IEEE Transactions on Medical Imaging, 2010, 29(11):1839-1850. 摘要 在x射线计算机断层扫描(CT)中&#xff0c;迭代重建三维图像的方法比传统的滤波反投影…

汇编语言——王爽版 总结

汇编语言-王爽summary《考试复习版》 摆烂一学期&#xff0c;期末抱佛脚 只针对必要内容总结&#xff0c;并非按目录总结 文章目录汇编语言-王爽summary《考试复习版》只针对必要内容总结&#xff0c;并非按目录总结前言一、基础知识汇编语言的组成存储器指令和数据存储单元CPU…

H2N-Gly-Gly-βAla-COOH, 42538-53-4

用作多肽和蛋白质亚硝化的低分子模型化合物。cas编号(净):627-74-7。 编号: 200129中文名称: 三肽Gly-Gly-βAlaCAS号: 42538-53-4单字母: H2N-GG-βA-OH三字母: H2N-Gly-Gly-βAla-COOH氨基酸个数: 3分子式: C7H13N3O4平均分子量: 203.2精确分子量: 203.09等电点(PI): 6.11pH7…

图解LeetCode——1779. 找到最近的有相同 X 或 Y 坐标的点(难度:简单)

一、题目 给你两个整数 x 和 y &#xff0c;表示你在一个笛卡尔坐标系下的 (x, y) 处。同时&#xff0c;在同一个坐标系下给你一个数组 points &#xff0c;其中 points[i] [ai, bi] 表示在 (ai, bi) 处有一个点。当一个点与你所在的位置有相同的 x 坐标或者相同的 y 坐标时&…

带你学习不一样的数据仓库系列-框架概念

编者按&#xff1a;本系列文章参考总结自IBM,FaceBook&#xff0c;Google等数据仓库构建英文文章&#xff0c;部分章节为直译过来&#xff0c;部分内容加上乐哥6年陌陌&#xff0c;快手等工作经验总结而来&#xff0c;让大家了解真实国外大厂数仓构建之路&#xff0c;国外同行对…

【自然语言处理概述】文本词频分析

【自然语言处理概述】文本词频分析 作者简介&#xff1a;在校大学生一枚&#xff0c;华为云享专家&#xff0c;阿里云专家博主&#xff0c;腾云先锋&#xff08;TDP&#xff09;成员&#xff0c;云曦智划项目总负责人&#xff0c;全国高等学校计算机教学与产业实践资源建设专家…

python-百度API文字识别

最近公司通过网络查询到我们部门有人工作时间逛b站次数太多&#xff0c;这事惊动了上层领导&#xff0c;搅得人心惶惶。突然星期某信服的一套监控员工电脑的系统&#xff0c;不经一颤。想着自己也尝试玩玩电脑屏幕文字识别-----抓取关键字&#xff0c;然后将图片保存下来。 这…

Cocos 帮助更多优秀移动游戏登上 Web 舞台

作者 / Cocos 3D 内容开发引擎对于一款游戏开发引擎来说&#xff0c;关注市场风向&#xff0c;第一时间将合适的技术带给开发者永远是最重要的工作之一。作为一款国际化的 3D 引擎&#xff0c;Cocos 在全球拥有 160 万开发者&#xff0c;覆盖全球设备超 16 亿&#xff0c;曾被用…