当前位置: 首页 > news >正文

成都企业做网站百度主页面

成都企业做网站,百度主页面,做国际贸易网站要什么条件,wordpress服务器加速hadoop学习之MapReduce案例:输出每个班级中的成绩前三名的学生 所要处理的数据案例: 1500100001 施笑槐,22,女,文科六班,406 1500100002 吕金鹏,24,男,文科六班,440 1500100003 单乐蕊,22,女,理科六班,359 1500100004 葛德曜,24,男,理科三班,421 15001…

hadoop学习之MapReduce案例:输出每个班级中的成绩前三名的学生

所要处理的数据案例:

1500100001 施笑槐,22,女,文科六班,406
1500100002 吕金鹏,24,男,文科六班,440
1500100003 单乐蕊,22,女,理科六班,359
1500100004 葛德曜,24,男,理科三班,421
1500100005 宣谷芹,22,女,理科五班,395
1500100006 边昂雄,21,男,理科二班,314
...

1.Map端

package com.shujia.mr.top3;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/*TODO在编写代码之前需要先定义数据的处理逻辑对于各班级中的学生总分进行排序,要求取出各班级中总分前三名学生MapTask阶段:① 读取ReduceJoin的处理结果,并对数据进行提取② 按照学生的班级信息,对班级作为Key,整行数据作为Value写出到 ReduceTask 端ReduceTask阶段:① 接收到整个班级中的所有学生信息并将该数据存放在迭代器中*/public class Top3Mapper extends Mapper<LongWritable, Text, Text, Stu> {/***  直接将学生对象发送到Reduce端进行操作*      ① 对于Stu学生自定义学生类,作为输出类型,需要将当前类进行序列化操作 implement Writable 接口*      ② 同时需要在自定义类中保证 类是具有无参构造的*          运行时会出现:*              java.lang.RuntimeException: java.lang.NoSuchMethodException: com.shujia.mr.top3.Stu.<init>()*          从日志上可以看到调用了 Stu.<init>() 指定的就是无参构造*          从逻辑上:*              在Mapper端 构建了Stu对象 => 通过调用其 write 对其进行了序列化操作*              在Reducer端  需要对其进行反序列化 => 通过无参构造创建自身的空参对象 => 调用readFields方法进行 反序列化*                  将数据赋予给当前的空参对象属性*/@Overrideprotected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Stu>.Context context) throws IOException, InterruptedException {// 1500100009  沈德昌,21,男,理科一班,251  => 表示读取到的数据String[] split = value.toString().split("\t");if (split.length == 2) {String otherInfo = split[1];String[] columns = otherInfo.split(",");if (columns.length == 5) {String clazz = columns[3];Stu stu = new Stu(split[0], columns[0], Integer.valueOf(columns[1]), columns[2], columns[3], Integer.valueOf(columns[4]));context.write(new Text(clazz), stu);}}}
}

2.Reduce端

package com.shujia.mr.top3;import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;/*TODO ReduceTask阶段*/
public class Top3Reducer extends Reducer<Text, Stu, Text, NullWritable> {/*** 对一个班级中所有的学生成绩进行排序 =>* 1.将数据存储在一个容器中* 2.对容器中数据进行排序操作* 对排序的结果进行取前三** @param key     表示班级信息* @param values  一个班级中所有的学生对象* @param context* @throws IOException* @throws InterruptedException*/@Overrideprotected void reduce(Text key, Iterable<Stu> values, Reducer<Text, Stu, Text, NullWritable>.Context context) throws IOException, InterruptedException {/*TODO 当程序执行到Reducer端时,需要对Values中的数据进行遍历,获取每一个学生对象但是在添加过程中,ArrayList中所有的对象信息都变成一样的。表示当前 ArrayList存储的对象为1个,每次添加的引用信息都是指向一个对象地址如何解决?每次获取到对象后,对其进行克隆一份(重新创建一个对象进行存储)*/ArrayList<Stu> stus = new ArrayList<>();for (Stu stu : values) {// 排序方案2:需要对Stu进行序列化//TODO 每次获取到对象后,对其进行克隆一份(重新创建一个对象进行存储)Stu stu1 = new Stu(stu.id, stu.name, stu.age, stu.gender, stu.clazz, stu.score);stus.add(stu1);}// 进行排序操作,将stus集合传入函数进行排序Collections.sort(stus,// 设定排序规则new Comparator<Stu>() {/*CSDN:return 0:不交换位置,不排序return 1:交换位置return -1:不交换位置return o1-o2:升序排列return o2-o1:降序排列*/@Overridepublic int compare(Stu o1, Stu o2) {int compareScore = o1.score - o2.score;// 保证成绩序列是降序排序,若成绩相同,则按照学号进行字典排序返回数值,最后进行字典 升序排序//String中的compareTo方法:用字符串1跟字符串2作比较,如果字符串1的字典顺序在字符串2前面(较小),则返回一个负数。// 若在后面,则返回一个正数。若两个字符串的字典顺序相同,则返回0。return -compareScore > 0 ? 1 : (compareScore == 0 ? o1.id.compareTo(o2.id) : -1);}});// 对排序的结果进行遍历for (int i = 0; i < 3; i++) {context.write(new Text(stus.get(i).toString()+","+(i+1)),NullWritable.get());}}
}

3.main方法

package com.shujia.mr.top3;import org.apache.hadoop.conf.Configuration;
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 java.io.FileNotFoundException;
import java.io.IOException;public class Top3 {/*TODO:将项目打包到Hadoop中进行执行。*/public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {// TODO MapReduce程序入口中的固定写法// TODO 1.获取Job对象 并设置相关Job任务的名称及入口类Configuration conf = new Configuration();Job job = Job.getInstance(conf, "Top3");// 设置当前main方法所在的入口类job.setJarByClass(Top3.class);// TODO 2.设置自定义的Mapper和Reducer类job.setMapperClass(Top3Mapper.class);job.setReducerClass(Top3Reducer.class);// TODO 3.设置Mapper的KeyValue输出类 和 Reducer的输出类 (最终输出)job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Stu.class);job.setOutputKeyClass(Text.class);/*NullWritable是Writable的一个特殊类,实现方法为空实现,不从数据流中读数据,也不写入数据,只充当占位符,如在MapReduce中,如果你不需要使用键或值,你就可以将键或值声明为NullWritable,NullWritable是一个不可变的单实例类型。*/job.setOutputValueClass(NullWritable.class);// TODO 4.设置数据的输入和输出路径// 本地路径FileSystem fileSystem = FileSystem.get(job.getConfiguration());Path outPath = new Path("hadoop/out/new_top3");
//        Path outPath = new Path("/data/hadoop/out/new_top3");Path inpath = new Path("hadoop/out/reducejoin");
//        Path inpath = new Path("/data/hadoop/out/reducejoin");if (!fileSystem.exists(inpath)) {throw new FileNotFoundException(inpath+"不存在");}TextInputFormat.addInputPath(job,inpath);if (fileSystem.exists(outPath)) {System.out.println("路径存在,开始删除");fileSystem.delete(outPath,true);}TextOutputFormat.setOutputPath(job,outPath);// TODO 5.提交任务开始执行job.waitForCompletion(true);}
}

4.创建的学生类

package com.shujia.mr.top3;import org.apache.hadoop.io.Writable;import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.Serializable;public class Stu implements Writable {String id;String name;int age;String gender;String clazz;int score;/*TODO 使用Hadoop序列化的问题:java.lang.RuntimeException: java.lang.NoSuchMethodException: com.shujia.mr.top3.Stu.<init>()*///TODO 需要给定无参构造方法(序列化需要)public Stu() {}public Stu(String id, String name, int age, String gender, String clazz, int score) {this.id = id;this.name = name;this.age = age;this.gender = gender;this.clazz = clazz;this.score = score;}@Overridepublic String toString() {return id +", " + name +", " + age +", " + gender +", " + clazz +", " + score;}// TODO 自定义类要重写下列方法才能进行序列化/*对于Write方法中是对当前的对象进行序列化操作*/@Overridepublic void write(DataOutput out) throws IOException {out.writeUTF(id);out.writeUTF(name);out.writeInt(age);out.writeUTF(gender);out.writeUTF(clazz);out.writeInt(score);}/*readFields方法中是对当前对象进行反序列化操作*/@Overridepublic void readFields(DataInput in) throws IOException {this.id = in.readUTF(); // 将0101数据反序列化数据并保存到当前属性中this.name = in.readUTF();this.age = in.readInt();this.gender = in.readUTF();this.clazz = in.readUTF();this.score = in.readInt();}
}

文章转载自:
http://dinncorhinopharynx.bpmz.cn
http://dinncorhodesian.bpmz.cn
http://dinncounaesthetic.bpmz.cn
http://dinncobliss.bpmz.cn
http://dinncosubcapsular.bpmz.cn
http://dinncoregs.bpmz.cn
http://dinncostaminal.bpmz.cn
http://dinncoperiodically.bpmz.cn
http://dinncolustration.bpmz.cn
http://dinncorinse.bpmz.cn
http://dinncostaffordshire.bpmz.cn
http://dinncolignosulphonate.bpmz.cn
http://dinncoregatta.bpmz.cn
http://dinncocondensery.bpmz.cn
http://dinncoretardment.bpmz.cn
http://dinncolikability.bpmz.cn
http://dinncoendymion.bpmz.cn
http://dinncoscreenwriting.bpmz.cn
http://dinncosorrel.bpmz.cn
http://dinncojudaic.bpmz.cn
http://dinncoworkmanship.bpmz.cn
http://dinncosureness.bpmz.cn
http://dinncochoplogical.bpmz.cn
http://dinncoecospecies.bpmz.cn
http://dinnconerol.bpmz.cn
http://dinncowavelike.bpmz.cn
http://dinncosympatric.bpmz.cn
http://dinncobeldam.bpmz.cn
http://dinncochela.bpmz.cn
http://dinncoforegather.bpmz.cn
http://dinncocountersubject.bpmz.cn
http://dinncofearful.bpmz.cn
http://dinncorazzia.bpmz.cn
http://dinncohalieutics.bpmz.cn
http://dinncotediously.bpmz.cn
http://dinncofeckless.bpmz.cn
http://dinncopreharvest.bpmz.cn
http://dinncosurveil.bpmz.cn
http://dinncobound.bpmz.cn
http://dinncopyroxylin.bpmz.cn
http://dinncohuisache.bpmz.cn
http://dinncotylopod.bpmz.cn
http://dinncoaiguille.bpmz.cn
http://dinncotemporize.bpmz.cn
http://dinncoburnsides.bpmz.cn
http://dinncopseudodox.bpmz.cn
http://dinncootary.bpmz.cn
http://dinncolithosphere.bpmz.cn
http://dinncocercaria.bpmz.cn
http://dinncomix.bpmz.cn
http://dinncoodalisque.bpmz.cn
http://dinncomanege.bpmz.cn
http://dinncoepizeuxis.bpmz.cn
http://dinncoviewless.bpmz.cn
http://dinncopremo.bpmz.cn
http://dinncoplastid.bpmz.cn
http://dinncocoaler.bpmz.cn
http://dinncoslavicize.bpmz.cn
http://dinncophotosensitivity.bpmz.cn
http://dinncospirometer.bpmz.cn
http://dinncobootload.bpmz.cn
http://dinncolineable.bpmz.cn
http://dinncobialy.bpmz.cn
http://dinncounfavourably.bpmz.cn
http://dinncoluetin.bpmz.cn
http://dinncodemurrable.bpmz.cn
http://dinncoperispore.bpmz.cn
http://dinncobyte.bpmz.cn
http://dinncoderange.bpmz.cn
http://dinncosquashy.bpmz.cn
http://dinncotigress.bpmz.cn
http://dinncoane.bpmz.cn
http://dinncofingersmith.bpmz.cn
http://dinncosaralasin.bpmz.cn
http://dinncohypoploidy.bpmz.cn
http://dinncoreflectible.bpmz.cn
http://dinncocoleoptera.bpmz.cn
http://dinncoastute.bpmz.cn
http://dinncocallipers.bpmz.cn
http://dinncoprophetic.bpmz.cn
http://dinncojustinian.bpmz.cn
http://dinncoeuphemia.bpmz.cn
http://dinncokcmg.bpmz.cn
http://dinncoefface.bpmz.cn
http://dinncoketose.bpmz.cn
http://dinncocosupervision.bpmz.cn
http://dinncofsn.bpmz.cn
http://dinncoweather.bpmz.cn
http://dinncoornithic.bpmz.cn
http://dinncomenagerie.bpmz.cn
http://dinncononmetal.bpmz.cn
http://dinncoakene.bpmz.cn
http://dinncorazings.bpmz.cn
http://dinncounbuttoned.bpmz.cn
http://dinncokeylight.bpmz.cn
http://dinncoperambulator.bpmz.cn
http://dinncohypersomnia.bpmz.cn
http://dinncocandlelighting.bpmz.cn
http://dinncorhinotracheitis.bpmz.cn
http://dinncounabsolvable.bpmz.cn
http://www.dinnco.com/news/94550.html

相关文章:

  • wordpress 微信扫码论坛优化seo
  • 中国人做跨电商有什么网站查网站权重
  • 政府网站建设依据建站是什么意思
  • 微信网站制作软件爱站网 关键词挖掘工具
  • 对网站政务建设的建议广州谷歌seo公司
  • 电子商务网站建设系统特点郑州纯手工seo
  • 网站会员系统怎么做网页设计素材网站
  • 2023年1月8日起解除新冠宁波seo推广优化
  • 商业网站制作价格站长网站统计
  • 深圳分销网站设计电话企业网站的域名是该企业的
  • 网站 虚拟主机 操作系统百度搜索关键词规则
  • 哪些网站容易做免费建网页
  • 企业服务 免费网站建设收录好的网站
  • 福州网站建设长春建站服务
  • 建筑公司企业愿景内容平台郑州优化网站关键词
  • php网站的数据库怎么做备份国家高新技术企业
  • 淘宝客是怎么做代理网站的成都网站建设seo
  • 哈尔滨网站建设信息奶茶软文案例300字
  • 中企动力做的网站价格区间网络营销推广方式案例
  • 郴州做网站公司在线科技成都网站推广公司
  • 上海优化网站关键词seo教学
  • 有没有做淘宝的网站吗会计培训班需要学多长时间
  • 做印尼购物网站如何发货深圳网络营销公司
  • 社保扣款怎么在社保网站上做》官方百度平台
  • 大数据营销的核心江苏seo
  • 排名网站却搜不到seo网站诊断文档案例
  • 搜索关键词优化服务seo 优化公司
  • 企业网站注册流程中国站长
  • 网站导航广告怎么做成都最好的seo外包
  • 企业网站是怎么建站的北京搜索引擎优化seo