【细节拉满】Hadoop课程设计项⽬,使⽤idea编写基于
MapReduce的学⽣成绩分析。。。
⽬录
本⽂只是⽤来分享代码,如果想要学习MapReduce如何去写的请转⾄下⾯的参考博客,该篇博客以“”统计每门课程中相同分数分布情况”为模板,从问题分析⼊⼿,⼀步步创建⼀个mapper、reducer和main(driver)从⽽组成⼀整个的MapReduce。
不想跟着博客⼀步步操作的也可以选择直接下载项⽬⽂件,并在⾃⼰的idea上运⾏,数据源依旧是以下的学⽣成绩。
1 数据源(学⽣成绩.csv)
旧坑勿踩:可以复制下⾯数据,粘贴到txt⾥把⽂件拓展格式改为csv,在上传⾄Hadoop平台之前⼀定要确保⽂件的编码⽅式为utf-8(否则中⽂会乱码),具体操作为使⽤记事本打开学⽣成绩.csv⽂件,看右下⾓的编码⽅式,如果不是utf-8则可以将⽂件另存为时修改其编码⽅式。
⼀定⼀定⼀定不要为了元数据的好看就在第⼀⾏为数据加字段名,看是好看了,到时候运⾏不出来结果就很难受,不要问我怎么知道的,⼀个下午的⾎淋淋的教训。
英语,李沐,85,男,20
数学,李沐,54,男,20
⾳乐,李沐,54,男,20
体育,李沐,34,男,20
语⽂,李媛,81,⼥,20
⾳乐,李媛,85,⼥,20
体育,李媛,89,⼥,20
语⽂,马珂,75,⼥,19
英语,马珂,85,⼥,19
⾳乐,马珂,75,⼥,19
体育,马珂,65,⼥,19
语⽂,潘琴,42,⼥,20
英语,潘琴,48,⼥,20
⾳乐,潘琴,48,⼥,20
体育,潘琴,78,⼥,20
英语,秦灿,75,男,19
数学,秦灿,89,男,19
⾳乐,秦灿,85,男,19
体育,秦灿,99,男,19
语⽂,王靓,85,⼥,21
英语,王靓,85,⼥,21
数学,王靓,48,⼥,21
⾳乐,王靓,86,⼥,21
⾳乐,王靓,85,⼥,21
体育,王靓,96,⼥,21
体育,王靓,87,⼥,21
英语,吴起,85,男,20
数学,吴起,85,男,20
英语,张翔,96,男,20
数学,张翔,85,男,20
⾳乐,张翔,85,男,20
体育,张翔,87,男,20
语⽂,郑虎,85,男,20
数学,郑虎,85,男,20
⾳乐,郑虎,88,男,20
体育,郑虎,68,男,20
语⽂,周伟,76,男,19
英语,周伟,85,男,19
数学,周伟,76,男,19
⾳乐,周伟,99,男,19
体育,周伟,90,男,19
数学,朱鸿,90,男,21
⾳乐,朱鸿,80,男,21
体育,朱鸿,81,男,21
2 hadoop平台上传数据源
Hadoop平台上传数据,其实也可以理解为向HDFS⾥存储数据,前提是Hadoop的集必须搭建好,这⾥就默认⼤家都已经搭建完成并可以正常运⾏。这⾥可以如下图双击hadoop下的sbin⽬录下的d启动集。
集启动成功后,在源数据的存储路径下打开DOS窗⼝,可以在该⽬录的⽂件路径框下输⼊cmd打开,或者直接在桌⾯打开DOS窗⼝再cd进源数据的存储路径。按照下图使⽤命令创建⽬录并将源数据(学⽣成绩.csv)上传⾄hadoop平台
3 idea代码
3.1 ⼯程框架
新建⼀个maven⼯程,建⽴如下⼯程框架 :
3.2 导⼊依赖
MapReduce需要四个核⼼依赖,hadoop-client、hadoop-hdfs、hadoop-common、hadoop-mapreduce-client-core,依赖复制粘贴进⾃⼰的项⽬⼀定要记得刷新依赖,避免依赖还没导⼊成功就运⾏导致报错。
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
3.3 系统主⼊⼝(menu)
//这⾥的导包是完成跨package调⽤其它包⾥的类
import couerse_info.CiMain;
import course_score_same.CssMain;
import max_min_avg.MmaMain;
import sex_number_name.SnnMain;
import student_info.SiMain;
import sum_avg_sort.SasMain;
import flect.Method;
import java.util.Scanner;
public class menu {
public static void main(String[] args) {
try {
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("=========基于MapReduce的学⽣成绩分析=========");                System.out.println("1、计算每门成绩的最⾼分、最低分、平均分");
System.out.println("2、计算每个学⽣的总分及平均成绩并进⾏排序");
System.out.println("3、统计所有学⽣的信息");
System.out.println("4、统计每门课程中相同分数分布情况");
System.out.println("5、统计各性别的⼈数及他们的姓名");
System.out.println("6、统计每门课程信息");
System.out.println("7、退出");
System.out.print("请输⼊你想要选择的功能:");
int option = Int();
Method method = null;
switch(option){
case 1:
method = Method("main", String[].class);
method.invoke(null, (Object) new String[] {});
break;
case 2:
method = Method("main", String[].class);
method.invoke(null, (Object) new String[] {});
break;
case 3:
method = Method("main", String[].class);
method.invoke(null, (Object) new String[] {});
break;
case 4:
method = Method("main", String[].class);
method.invoke(null, (Object) new String[] {});
break;
case 5:
method = Method("main", String[].class);
method.invoke(null, (Object) new String[] {});
break;
case 6:
method = Method("main", String[].class);
method.invoke(null, (Object) new String[] {});
break;
case 7:
break;
default:
System.out.println("输⼊正确的功能按键!!");
基于java的课程设计题目
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
3.4 六个mapreduce
3.4.1 计算每门成绩的最⾼分、最低分、平均分(Mma)
package max_min_avg;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
/*
stu[0]:课程名称
stu[1]:学⽣姓名
stu[2]:成绩
stu[3]:性别
stu[4]:年龄
该功能实现的计算出每门课程中的最⾼分、最低分、平均分
*/
public class MmaMapper extends Mapper<LongWritable,Text,Text,Text> {
@Override
protected void map(LongWritable key1,Text value1,Context context)throws IOException,InterruptedException{        //将⽂件的每⼀⾏传递过来,使⽤split分割后利⽤字符数组进⾏接收
String[] splits = String().split(",");
//向Reducer传递参数-> Key:课程 Value:成绩
context.write(new Text(splits[0]),new Text(splits[2]));
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。