提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
学习的记录,有误请指正
需要已经配置好IDEA和hadoop的环境
一、题目要求
1、求DataBase课程的选修人数
2、求每个同学的不及格的门数
3、求各个课程的选课人数
二、数据解析
student.txt文件部分数据
Alger,Algorithm,50
Alger,OperatingSystem,32
Alger,Python,96
Alger,ComputerNetwork,20
Alger,Software,74
Allen,Algorithm,76
Allen,OperatingSystem,70
Allen,Python,10
Allen,Software,76
Alston,Algorithm,78
Alston,DataStructure,74
Alston,Python,96
Alston,Software,28
Alva,DataBase,72
Alva,DataStructure,64
Alva,CLanguage,0
Alva,ComputerNetwork,58
Alva,Software,82
Alvin,DataBase,88
Alvin,Algorithm,96
Alvin,OperatingSystem,26
Alvin,Python,84
Alvin,ComputerNetwork,76
Alvis,Algorithm,18
Alvis,DataStructure,56
该文件分为三部分
第一部分为学生姓名
第二部分为选修课程
第三部分为该学生对应选修个课程的成绩。
很明显的可以看出他们是以英文标点 "," 相隔。
三、需求分析及代码编写
总体的思路:
先通过InputFormat的子方法FileInputFormat将文件上传到hadoop集群当中,这是我们的文本数据将会被按照行划分,形成一个<k1,v1>的一个键值对。其中k1相当于偏移量,v1则是改行的数据。demo:Alger,Algorithm,50被划分成<0 Alger,Algorithm,50>。此时k1的类型时LongWritable,v1的类型是Text
第二步,map阶段,在这个阶段,要继承Mapper重写map函数。我们要做的就是对v1进行一些操作,比如按照什么分隔符进行分割文本数据,分割之后选取那些我们需要的数据,并形成一个新的<k2,v2>,传入到Reducer阶段
第三步,Reducer阶段,这个阶段就是对map阶段过来的数据进行一些汇并进一步汇总,并进一步精细。这要继承Reducer重写reduce函数。
最后,通过OutputFormat的子方法FileOutputFormat将Reducer段的结果输出。