【手把手 脑把脑】教会你使用idea基于MapReduce的统计数据分析(从问题分析到代码编写)

目录 1 编程前总分析 1.1 数据源 1.2 需要掌握的知识 1.2.1 Hadoop对比java的数据类型…

目录

1 编程前总分析

1.1 数据源

1.2 需要掌握的知识

1.2.1 Hadoop对比java的数据类型

1.2.2 MapReduce流程简介

1.3.3 MapReduce流程细分

2 编码阶段

2.1 导入依赖

2.2 mapper

2.3 reducer

2.4 main


1 编程前总分析

1.1 数据源

1.2 需要掌握的知识

1.2.1 Hadoop对比java的数据类型

java Hadoop
boolean BooleanWritable
Integer/int IntWritable
Long/long LongWritable
Float/float FloatWritable
Double/double DoubleWritable
String Text
NullWritable

1.2.2 MapReduce流程简介

MapReduce是一种简化的并行计算编程模型框架,主要解决了分布式计算的相关问题。所谓的分布式计算就是将一个文件里的数据内容,一行行的发送给mapper,mapper接收到一行数据使用split分割后接收,并按key分组后传给reducer,reducer将接收到的一组数据进行处理后输出,当所有的组都处理完成结束一个MapReduce。

1.3.3 MapReduce流程细分

功能:统计每门课程中相同分数的人有多少及他们的名字

思考一下,想要统计每门课程中相同分数的人数及名字,我们需要以什么字段为标准对数据进行分组(mapper最主要的功能就是分组)?想要搞明白上面的问题,试着和mysql的分组查询操作做一下类比,具体sql语句如下:

SELECT 姓名 FROM 表 GROUP BY 课程名称,成绩 ;

参考sql语句的分组查询,mapper功能就相当于按课程和成绩两个字段值对数据进行分组并查询学生姓名。mapper里的最后一句context.write(key,value);里的两个参数,key等于GROUP BY后面的字段名–>课程成绩和成绩的拼接字符串,value等于GROUP BY前面的字段名–>姓名。mapper就实现了将所有key值相同的分为一组,value放在迭代器中,一组组传给reducer,reducer使用一个Text类型的key和迭代器value进行接收。

2 编码阶段

mapreduce拆分:每个mapreduce程序都可以拆分成三个小部分mapper类、reducer类、main方法类。每个类都有其固定的框架,需要改变的就只有mapper和reducer类中重写方法的方法体本身,还有main方法里面的各项参数值。

如果说,当然我的读者肯定都是聪明的亚批,我是说如果你朋友的java编程基础不是很好,我的注释表示它完全可以很细

2.1 导入依赖

MapReduce不需导入的四个依赖(hadoop-client、hadoop-hdfs、hadoop-common、hadoop-mapreduce-client-core)

2.2 mapper

2.3 reducer

2.4 main

至此,一个完整的MapReduce的编写就已经完全结束了,如果想要别的功能,只需要修改mapper和reducer类中重写方法的方法体本身,还有main方法里面的各项参数值即可。

为了进一步锻炼大家MapReduce确定mapper输出的key和value,下面再找两个例子练习一下(每个人的想法都不一样,所以说并没有标准的答案,合理即可):

  • 统计所有学生的信息—>(key:姓名+性别+年龄;value:课程+成绩)
  • 计算每门成绩的最高分、最低分、平均分—>(key:课程名称;value:成绩)
  • 统计各性别的人数及他们的姓名—>(key:性别;value:姓名)

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/8010.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部