欢迎来到天天文库
浏览记录
ID:39361148
大小:245.50 KB
页数:7页
时间:2019-07-01
《mapreduce倒排索引算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、..Mapreduce程序设计报告姓名:学号:题目:莎士比亚文集倒排索引算法....1、实验环境联想pc机虚拟机:VM10.0操作系统:Centos6.4Hadoop版本:hadoop1.2.1Jdk版本:jdk-7u25Eclipse版本:eclipse-SDK-4.2.2-linux-gtk-x86_642、实验设计及源程序2.1实验说明对莎士比亚文集文档数据进行处理,对莎士比亚文集文档数据进行倒排索引处理,结果输出到指定文件2.2实验设计(1)InvertedIndexMapper类这个类实现Mapper接口中的map方法,输入参数中的value
2、是文本文件中的一行,利用正则表达式对数据进行处理,使文本中的非字母和数字符号转换成空格,然后利用StringTokenizer将这个字符串拆成单词,最后将输出结果,outkey为单词+单词所在的文件名,outvalue为1。publicstaticclassInvertedIndexMapperextendsMapper{privatefinalstaticIntWritableone=newIntWritable(1);publicvoidmap(Objectkey,Textvalue,Co
3、ntextcontext)throwsIOException,InterruptedException{//获取文件名以及预处理FileSplitfilesplit=(FileSplit)context.getInputSplit();Stringfilename=filesplit.getPath().getName();Stringline=value.toString();Strings;//利用正则表达式除去非数字和字母的符号Patternp=Pattern.compile("[^\w+]");Matcherm=p.matcher(line)
4、;Stringline2=m.replaceAll("");StringTokenizeritr=newStringTokenizer(line2);//按照空格对字符串进行划分while(itr.hasMoreTokens()){s=itr.nextToken().toLowerCase();if(!ls.contains(s)){Textfilename_num=newText(s+","+filename);//将单词和单词所在的文件名进行合并context.write(filename_num,one);}....}}}(2)InvertedI
5、ndexPartitioner类这个类是自定义的Partitioner类,通过复写getPartition()方法来自定义子集的分区key。将key按照分隔符进行分割,取key的前面部分进行分区,将相同的(即单词相同)分入同一个reduce。publicstaticclassInvertedIndexPartitionerextendsHashPartitioner{publicintgetPartition(Textkey,IntWritablevalue,intnumReduceTasks){Textkey1=n
6、ewText(key.toString().split(",")[0]);super.getPartition(key1,value,numReduceTasks);return0;}}(3)CombineReducer类这个类是在map输出结果之后输入reduce之前做的一个操作,是一个小型的reduce操作,这个操作可以减少reduce阶段的工作量,从而优化性能。publicstaticclassCombineReducerextendsReducer{publicvoidred
7、uce(Textkey,Iterablevalues,Contextcontext)throwsIOException,InterruptedException{intsum=0;for(IntWritableval:values){sum+=val.get();}context.write(key,newIntWritable(sum));}}(4)InvertedIndexRedecuer类这个类实现了Reducer接口中的reduce方法,map的结果经过combine处理之后,数据输入reduce,key为单词+单词所
8、在文件名,value为单词的词频数,由于要实现倒排,所以key只能为单词,取key的第一部分即
此文档下载收益归作者所有