</build>
项目创建完毕
三、编写MapReduce程序
===============
如果对Map和Reduce对应阶段的任务和处理结果不熟悉的可以看我之前那一篇 单词统计排序教程,有详细介绍
(1)自定义数据类
该类的作用:方便统计主播的指标数据,需要把这些字段整合到一个对象中,以便日后维护
新建一个VideoInfoWritable类继承Writable类,设置四个属性,自己补上get()和set()方法
public class VideoInfoWritable extends Writable {
private long gold; //金币
private long watchnumpv; //观看时长
private long follower; //粉丝数量
private long length; //总播放时长
}
复写Writable类的两个方法,一个readFileds输入数据,一个write输出数据
@Override
public void readFields(DataInput dataInput) throws IOException {
this.gold = dataInput.readLong();
this.watchnumpv = dataInput.readLong();
this.follower = dataInput.readLong();
this.length = dataInput.readLong();
}
@Override
public void write(DataOutput dataOutput) throws IOException {
dataOutput.writeLong(gold);
dataOutput.writeLong(watchnumpv);
dataOutput.writeLong(follower);
dataOutput.writeLong(length);
}
(2)Mapper类
该类的作用:对数据进行按行读取,切割获取对应字段数据,封装字段数据到(1)自定义的类对象中
新建一个videoInfoMap类继承Mapper类,复写mapper方法
public class VideoInfoMap extends Mapper<LongWritable, Text, Text, VideoInfoWritable> {
@Override
public void map(LongWritable k1, Text v1, Context context) throws IOException, InterruptedException {
String line = v1.toString(); //读取清先之后的每一行数