- 3
- 0
- 约4.54千字
- 约 15页
- 2024-05-07 发布于福建
- 举报
大数据平台部署与运维《大数据平台部署与运维》课程组MapReduce编程模型-WordCount基本原理
上节课知识回顾我们需要统计文本中每个单词出现的次数,我们看看怎么完成的?
过程很显然,首先拿到文本不是立刻就送去MapReduce中处理,而是先通过一个叫做TextInputFormat的类,处理好原有文本的数据,用偏移量逐个表识。然后再传入map中处理。然而map只是对单词进行简单的编号(同时编上1),在再进入reduce类之前,先通过迭代器(图中黑色部分),把map的数据简单的处理,如上图的hadoop为例,迭代器的内容就是hadoop,iterator(1,1),那么在reduce类中,我们只要统计好迭代器中的数值就好了。
Map阶段首先这个WordCountMapper类要继承Mapper类,这个类后面的参数是什么呢?LongWritable,Text,NullWritable,LongWritable,为什么要这样写呢。实际上这四个参数分别对应KEYIN,VALUEIN,KEYOUT,VALUEOUT,也就是输入的key,输入的value,输出的key,输出的value。
Map阶段protected?voidmap(LongWritable?key,Textvalue,???????????????????????????MapperLongWritable,Text,?NullWritable,?LongWritable.Contextcontext)???????????????????????????throws?IOException,?InterruptedException??{??????????????????//拿到一行文本内容,转换成String类型??????????????????String?valueString?=?value.toString();??????????????????//将这行文本切分成单词??????????????????String?wArr[]=?valueString.split(?);??????????????????//输出单词1???????????????????context.write(NullWritable.get(),?new?LongWritable(wArr.length));????????}toString(),它的作用是返回1个反映这个对象的字符串NullWritable是Writable的一个特殊类,实现方法为空实现,不从数据流中读数据,也不写入数据,只充当占位符,如在MapReduce中,如果你不需要使用键或值,你就可以将键或值声明为NullWritable,NullWritable是一个不可变的单实例类型。
Reduce阶段publicclass?WordCountReducer??extendsReducerNullWritable,?LongWritable,?NullWritable,?LongWritable{????????@Override编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。????????protected?voidreduce(NullWritable?key,?IterableLongWritablev2s,???????????????????????????ReducerNullWritable,?LongWritable,?NullWritable,?LongWritable.Context?context)throws?IOException,?InterruptedException??{??????????????????IteratorLongWritableit=v2s.iterator();??????????????????//定义一个计时器??????????????????long?sum=0;??????????????????//?通过value这个迭代器,遍历这一组kv中所有的value,进行累加??????????????????while(it.hasNext()){???????????????????????????sum?+=?it.next().get();}???????????????????context.write(NullWritable.get(),?new?LongWritable(sum));?}}
词频统计统计每个单词出现的次数
词频统计词频统计原
原创力文档

文档评论(0)