一、环境准备

编辑器:vscode
JDK版本:JDK1.8
项目管理器:maven

二、项目结构以及坐标依赖

项目结构:

坐标依赖:

 <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.5</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.5</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.5</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-core</artifactId><version>2.7.5</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-yarn-common</artifactId><version>2.7.5</version></dependency>

三、数据结构

数据下载地址:

链接:https://pan.baidu.com/s/10h_3TL27zYO0_WRTTfn2CQ
提取码:8888

数据预览:

去掉首行索引保存为.csv文件,上传到hadoop存储即可,存储路径自定义,只需后续在代码中修改即可。

四、项目代码

①MapReduce作业一
目标:job_counter: 统计每个球员的总的ACE数据
文件结构:

map_ace.java代码:

package job_counter;import java.io.IOException;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;public class map_ace extends Mapper<LongWritable,Text,Text,LongWritable> {/*输入的:k1 v1k1                           v1
longwriteable    行号                      text "1,2014,1,Thanasi Kokkinakis,Igor Sijsling,1,FirstRound,1,1,570"输出的:list(k2 v2)k2                            v2text        name           longwriteable aceA                              8A                              5B                              3*///map方法统计ACE球的个数/*输入(行,行值)输出(名字,ACE个数)*/@Overrideprotected void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {//1.每行文本拆分,并获取值String[] line=value.toString().split(",");String name=line[3];String ace=line[15];//2.写入上下文Text text=new Text();LongWritable longWritable=new LongWritable();text.set(name);longWritable.set(Long.parseLong(ace));context.write(text,longWritable);}
}

reduce_ace.java代码:

package job_counter;import java.io.IOException;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;public class reduce_ace extends Reducer<Text, LongWritable, Text, LongWritable> {//reduce方法统计总和/*  meger list(k2,v2)====>k2 list(v2)===A <8,5>输入的: k2    v2A       <8,5>B       <10,7>输出的:  k3    v3name    ace_totle*/@Overrideprotected void reduce(Text key,Iterable<LongWritable> values,Context context) throws IOException, InterruptedException {//遍历集合,将每个值累加long point=0;for (LongWritable value : values) {point=point+value.get();}//将k3,v3写入上下文context.write(key, new LongWritable(point));}
}

main_ace.java代码:

package job_counter;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;public class main_ace extends Configured implements Tool {@Overridepublic int run(String[] args) throws Exception {// TODO Auto-generated method stub//1.创建一个job任务对象Configuration conf=super.getConf();Job job=Job.getInstance(conf,"main_ace");//打包运行时函数job.setJarByClass(main_ace.class);//2.配置job对象//第一步:指定文件的读取方式和路径job.setInputFormatClass(TextInputFormat.class);TextInputFormat.addInputPath(job, new Path("hdfs://192.168.96.138:9000/user/hadoop/job_data"));//第二步,指定map阶段的处理方式job.setMapperClass(map_ace.class);//设置map阶段k2类型job.setMapOutputKeyClass(Text.class);//设置map阶段v2类型job.setMapOutputValueClass(LongWritable.class);//shuffe使用默认/*k1,v1 ===>k2,v2 ===>k3,v3meger list(k2,v2)====>k2 list(v2)===A <8,5>*///第七步指定reduce阶段的处理方式和数据类型job.setReducerClass(reduce_ace.class);//k3类型job.setOutputKeyClass(Text.class);//v3类型job.setOutputValueClass(LongWritable.class);//判断文件路径是否存在Path output= new Path("hdfs://192.168.96.138:9000/user/hadoop/counter_out_ace");FileSystem fs = FileSystem.get(conf);if (fs.exists(output)) {fs.delete(output, true);}//设置输出路径job.setOutputFormatClass(TextOutputFormat.class);TextOutputFormat.setOutputPath(job, output);//等待任务结束boolean b1=job.waitForCompletion(true);return b1 ? 0:1;}public static void main(String[] args) throws Exception {Configuration configuration=new Configuration();//start jobint run=ToolRunner.run(configuration, new main_ace(), args);System.exit(run);}
}

②MapReduce作业二
目标: job_class: 对%DF的球员根据四分位数分成四组
文件结构:

map_class.java代码:

package job_class;import java.io.IOException;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;public class map_class extends Mapper<LongWritable, Text, Text, NullWritable> {///对每个运动员进行四分位分类操作/*输入(行,行值)输出(行值,null)*/@Overrideprotected void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {//写入上下文context.write(value,NullWritable.get());}
}

part_class.java代码:

package job_class;import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;public class part_class extends Partitioner<Text,NullWritable>{/*1:定义分区2:返回对应的分区编号*//*四分位数25   0.11111111111111050 0.18181818181818275 0.300000000000000*/@Overridepublic int getPartition(Text text, NullWritable nullWritable, int i) {// TODO Auto-generated method stub//1,:拆分文本,获得字段String[] split=text.toString().split(",");String df=split[18];//%DF的坐标double low = 0.111111111111110;double zhong=0.181818181818182;double hig=0.300000000000000;//判断df与四分位数的关系if(Double.parseDouble(df)<low){//小于25%return 3;}else if(Double.parseDouble(df)>low & Double.parseDouble(df)<=zhong){//大于25%小于50%return 2; }else if(Double.parseDouble(df)>zhong & Double.parseDouble(df)<=hig){//大于50%小于75%return 1;}else{//大于75%return 0;}}
}

reduce_class.java代码:

package job_class;import java.io.IOException;import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;public class reduce_class extends Reducer<Text, NullWritable, Text, NullWritable> {//reduce方法不做处理,直接输出@Overrideprotected void reduce(Text key, Iterable<NullWritable> values,Context context) throws IOException, InterruptedException {context.write(key, NullWritable.get());}
}

main_class.java代码:

package job_class;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;public class main_class extends Configured implements Tool {@Overridepublic int run(String[] args) throws Exception {// TODO Auto-generated method stub// 1.创建一个job任务对象Configuration conf = super.getConf();Job job = Job.getInstance(conf, "main_class");// 打包运行时函数job.setJarByClass(main_class.class);// 2.配置job对象// 第一步:指定文件的读取方式和路径job.setInputFormatClass(TextInputFormat.class);TextInputFormat.addInputPath(job, new Path("hdfs://192.168.96.138:9000/user/hadoop/job_data"));// 第二步,指定map阶段的处理方式job.setMapperClass(map_class.class);// 设置map阶段k2类型job.setMapOutputKeyClass(Text.class);// 设置map阶段v2类型job.setMapOutputValueClass(NullWritable.class);// shuffe使用part_classjob.setPartitionerClass(part_class.class);//设置4个任务job.setNumReduceTasks(4);/** k1,v1 ===>k2,v2 ===>k3,v3*/// 第七步指定reduce阶段的处理方式和数据类型job.setReducerClass(reduce_class.class);// k3类型job.setOutputKeyClass(Text.class);// v3类型job.setOutputValueClass(NullWritable.class);// 判断文件路径是否存在Path output = new Path("hdfs://192.168.96.138:9000/user/hadoop/class_out_%DF");FileSystem fs = FileSystem.get(conf);if (fs.exists(output)) {fs.delete(output, true);}// 设置输出路径job.setOutputFormatClass(TextOutputFormat.class);TextOutputFormat.setOutputPath(job, output);// 等待任务结束boolean b1 = job.waitForCompletion(true);return b1 ? 0 : 1;}public static void main(String[] args) throws Exception {Configuration configuration = new Configuration();// start jobint run = ToolRunner.run(configuration, new main_class(), args);System.exit(run);}
}

基于网球体育数据的MapReduce实现案例相关推荐

  1. 基于python的数据建模与分析案例_基于案例详解Python数据分析与机器学习

    课程概述: 使用数据领域最主流语言Python及其分析与建模库作为核心武器.对于机器学习经典算法给出完整的原理推导并基于实例进行讲解,基于案例演示如何应用机器学习算法解决实际问题. 课程特色: 通俗易 ...

  2. 图解大数据 | 应用Map-Reduce进行大数据统计@实操案例

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-det ...

  3. ML之DataScience:基于机器学习处理数据科学(DataScience)任务(数据分析、特征工程、科学预测等)的简介、流程、案例应用执行详细攻略

    ML之DataScience:基于机器学习处理数据科学(DataScience)任务(数据分析.特征工程.科学预测等)的简介.流程.案例应用执行详细攻略 目录 数据科学的任务(数据分析.特征工程.科学 ...

  4. 大数据 - MapReduce编程案例 -BH3

    MapReduce编程案例 用mapreduce解决问题的关键是确定key,只有key相同的结果才会到同一个reduce中进行处理 默认分区使用HashPartitoner,hashCode%redu ...

  5. 纳米数据,专业的体育数据服务商,如何选择合理的数据api接口?赛事比分接口调试案例,比赛数据源码

    { info: {id: integer 比赛id season_id: integer 赛季id competition_id: integer 赛事id home_team_id: integer ...

  6. 案例详解:基于工业大数据和工业互联网的离散型智能工厂

    1.企业简介 深圳市豪恩声学股份有限公司创立于2001年,注册资本总额4168万元,公司在深圳坪山自建工业园区,拥有现代化办公及生产场地3.5万平方米,现有员工2000人,智能机器人近100台,现代化 ...

  7. 竞技体育数据可视化与可视化分析综述

    A survey of competitive sports data visualization and visual analysis 竞技体育数据可视化与可视化分析综述 研究背景:1.竞技体育的 ...

  8. hadoop之mapreduce教程+案例学习(二)

    第3章 MapReduce框架原理 目录 第3章 MapReduce框架原理 3.1 InputFormat数据输入 3.1.1 切片与MapTask并行度决定机制 3.1.2 Job提交流程源码和切 ...

  9. hadoop之mapreduce教程+案例学习(一)

    第1章 MapReduce概述 目录 第1章 MapReduce概述 1.1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发"基于Hadoop的数据分析 ...

最新文章

  1. 网站优化工作关键——稳定排名!
  2. 8.2 TensorFlow实现KNN与TensorFlow中的损失函数,优化函数
  3. 【通知】有三AI书籍和文化产品读者欢迎入群,送4本书!
  4. Java判断整数和浮点数
  5. 并发模式:生产者和消费者
  6. 【HTML基础】表格和表单
  7. linux 命令分类,常用linux 命令分类整理(篇一)
  8. Maven [ERROR] 不再支持源选项 5。请使用 6 或更高版本
  9. np.array 的shape (2,)与(2,1)的分别是什么意思
  10. OC 实现的几个排序算法
  11. oracle怎么恢复删除数据库数据库文件,Oracle只有数据文件恢复数据库
  12. 【数据库原理实验(openGauss)】 使用JDBC连接数据库
  13. 「译」创建一个Hexo主题-Part2:其他页面
  14. 如何在windows下把硬盘格式化成EXT3格式?
  15. 3DSMAX和ZBRUSH打造神秘性感美女
  16. oppo升级android,OPPO Real R807升级Android4.0教程
  17. 实验06 主成分分析法
  18. android app icon素材,史上最全的APP图标模板素材以及设计格式最全的
  19. iOS9获取手机序列号serialNumber(UDID)
  20. perl/tk_在Perl / Tk中使用高级小部件

热门文章

  1. 分段线性插值法实验报告_计算方法实验报告习题1(浙大版)
  2. 日语二级能力考试204个语法(中文详解)
  3. Oracle错误代码大全
  4. 单光子的产生助力实现大规模分布式量子计算网络
  5. Sourcetree 无法打开
  6. 订阅号如何获取用户基本信息?
  7. 虚室教学:足不出户就能做实验
  8. 【学习笔记】零基础入门NLP - 新闻文本分类实战
  9. 客户端连接StarRocks 报错“Could not initialize class org.apache.doris.rpc.BackendServiceProxy“
  10. install xmms