




已阅读5页,还剩66页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MapReduce程序设计(3),深入理解大数据-大数据处理与编程实践,鸣谢:本课程得到Google(北京)与Intel公司中国大学合作部精品课程计划资助,南京大学计算机科学与技术系主讲人:黄宜华,文档倒排算法简介InvertedIndex(倒排索引)是目前几乎所有支持全文检索的搜索引擎都要依赖的一个数据结构。基于索引结构,给出一个词(term),能取得含有这个term的文档列表(thelistofdocuments)WebSearch中的问题主要分为三部分:crawling(gatheringwebcontent)indexing(constructionoftheinvertedindex)retrieval(rankingdocumentsgivenaquery)crawling和indexing都是离线的,retrieval是在线、实时的,5.文档倒排索引算法,简单的文档倒排算法,文档倒排索引算法,基于以上索引的搜索结果:fishdoc1,doc2reddoc2,doc3redfishdoc2,doc1:onefishtwofish,doc2:redfishbluefish,doc3:oneredbird,倒排索引:one:doc1,doc3fish:doc1,doc2two:doc1red:doc2,doc3blue:doc2bird:doc3,简单的文档倒排算法,文档倒排索引算法,importjava.io.IOException;importjava.util.StringTokenizer;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Mapper;publicclassInvertedIndexMapperextendsMapperOverrideprotectedvoidmap(Textkey,Textvalue,Contextcontext)throwsIOException,InterruptedException/defaultRecordReader:LineRecordReader;key:lineoffset;value:linestringFileSplitfileSplit=(FileSplit)context.getInputSplit();StringfileName=fileSplit.getPath().getName();Textword=newText();TextfileName_lineOffset=newText(fileName+”#”+key.toString();StringTokenizeritr=newStringTokenizer(value.toString();for(;itr.hasMoreTokens();)word.set(itr.nextToken();context.write(word,fileName_lineOffset);,改进:map输出的key除了文件名,还给出了该词所在行的偏移值:格式:filename#offset,简单的文档倒排算法,文档倒排索引算法,importjava.io.IOException;importjava.util.Collections;importjava.util.Iterator;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Reducer;publicclassInvertedIndexReducerextendsReducerOverrideprotectedvoidreduce(Textkey,Iterablevalues,Contextcontext)throwsIOException,InterruptedExceptionIteratorit=values.iterator();StringBuilderall=newStringBuilder();if(it.hasNext()all.append(it.next().toString();for(;it.hasNext();)all.append(“;);all.append(it.next().toString();context.write(key,newText(all.toString();/最终输出键值对示例:(“fish,“doc1#0;doc1#8;doc2#0;doc2#8),简单的文档倒排算法,文档倒排索引算法,publicclassInvertedIndexerpublicstaticvoidmain(Stringargs)tryConfigurationconf=newConfiguration();job=newJob(conf,invertindex);job.setJarByClass(InvertedIndexer.class);job.setInputFormatClass(TextInputFormat.class);job.setMapperClass(InvertedIndexMapper.class);job.setReducerClass(InvertedIndexReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);FileInputFormat.addInputPath(job,newPath(args0);FileOutputFormat.setOutputPath(job,newPath(args1);System.exit(job.waitForCompletion(true)?0:1);catch(Exceptione)e.printStackTrace();,带词频等属性的文档倒排算法,文档倒排索引算法,如果考虑单词在每个文档中出现的词频、位置、对应Web文档的URL等诸多属性,则前述简单的倒排算法就不足以有效工作。我们把这些词频、位置等诸多属性称为有效负载(Payload),以下的算法内容引自JimmyLin,Data-IntensiveTextProcessingwithMapReduce,2010,CollegePark,以及其课件,带词频等属性的文档倒排算法基本的倒排索引结构一个倒排索引由大量的postingslist构成一个postingslist由多个posting构成(按docid排序)一个postingslist与一个term关联一个posting包含一个documentid和一个payloadpayload上载有term在document中出现情况相关的信息(e.g.termfrequency,positions,termproperties)同时还有对应Web文档到其URL的映射doc_idURL,文档倒排索引算法,带词频属性的文档倒排算法Map和Reduce实现伪代码1:classMapper2:procedureMap(dociddn,docd)3:FnewAssociativeArray4:foralltermtdocddo5:FtFt+16:foralltermtFdo7:Emit(termt,posting)1:classReducer2:procedureReduce(termt,postings,)3:PnewList4:forallpostingpostings,do5:Append(P,)6:Sort(P)7:Emit(termt;postingsP),文档倒排索引算法,带词频属性的文档倒排算法,Asimpleexampleposting(docid,tf),文档倒排索引算法,带词频属性的文档倒排算法ScalabilitybottleneckThealgorithmassumesthatthereissufficientmemorytoholdallpostingsassociatedwiththesameterm.Thereducerfirstbuffersallpostingsandthenperformsanin-memorysortAscollectionsgrowlarger,reducerswillrunoutofmemorySolutionlettheMapReduceruntimetodothesortingEmittheintermediatekey-valuepairslikethis:(tuple,tff)(designtrick:value-to-keyconversion),文档倒排索引算法,arevisedexample,文档倒排索引算法,可扩展的带词频属性的文档倒排算法Mapper1:classMapper2:methodMap(dociddn;docd)3:FnewAssociativeArray4:foralltermtdocddo5:FtFt+16:foralltermtFdo7:Emit(tuple,tfFt),文档倒排索引算法,问题:当对键值对进行shuffle处理以传送给合适的Reducer时,将按照新的键进行排序和选择Reducer,因而同一个term的键值对可能被分区到不同的Reducer!解决方案:定制Partitioner来解决这个问题,可扩展的带词频属性的文档倒排算法AcustomizedpartitionerWhy?Toensurethatalltupleswiththesametermareshuffledtothesamereducer(noticethatthenewkeyisatuple)How?基本思想是把组合键临时拆开,“蒙骗”partitioner按照而不是进行分区选择正确的Reducer,这样可保证同一个term下的一组键值对一定被分区到同一个ReducerClassNewPartitionerextendsHashPartitioner/org.apache.hadoop.mapreduce.lib.partition.HashPartitioner/overridethemethodgetPartition(Kkey,Vvalue,intnumReduceTasks)term=key.toString().split(“,”)0;/=termsuper.getPartition(term,value,numReduceTasks);SetthecustomizedpartitionerinjobconfigurationJob.setPartitionerClass(NewPartitioner),文档倒排索引算法,InvertedIndexing,Arevisedexample(cont.),文档倒排索引算法,CustomizedPartitioner,但进入reduce的键值对仍按照(term,docid)排序,可扩展的带词频等属性的文档倒排算法(cont.)Reducer1:classReducer2:methodSetup/初始化3:tprev;4:PnewPostingsList5:methodReduce(tuple,tff)6:ifttprevtprevthen7:Emit(tprev,P)8:P.Reset()9:P.Add()10:tprevt11:methodClose12:Emit(t,P),文档倒排索引算法,用于输出最后一次未得到输出的,可扩展的带词频等属性的文档倒排算法(cont.)Extensions单词形态还原(e.g.books-book,)removingstopwords(commonwordssuchasthe,a,of,etc),文档倒排索引算法,Afewdesigntricks(“DesignPatterns”)LocalaggregationusecombinerComplexstructures,suchas“pairs”and“stripes”value-to-keyconversion,MapReduce算法设计总结,PageRank概述什么是PageRankPageRank的简化模型PageRank的随机浏览模型PageRank的MapReduce实现,6.网页排名图算法PageRank,什么是PageRankPageRank是一种在搜索引擎中根据网页之间相互的链接关系计算网页排名的技术。PageRank是Google用来标识网页的等级或重要性的一种方法。其级别从1到10级,PR值越高说明该网页越受欢迎(越重要)。,网页排名图算法PageRank,PageRank的基本设计思想和设计原则,被许多优质网页所链接的网页,多半也是优质网页。一个网页要想拥有较高的PR值的条件:有很多网页链接到它;有高质量的网页链接到它,网页排名图算法PageRank,PageRank的简化模型,可以把互联网上的各个网页之间的链接关系看成一个有向图。对于任意网页Pi,它的PageRank值可表示为:其中Bi为所有链接到网页i的网页集合Lj为网页j的对外链接数(出度)。,网页排名图算法PageRank,简化模型,网页排名图算法PageRank,幂迭代算法(PowerIteration),,r=?幂迭代算法:假设共有N个页面初始化:r(0)=1/N,.,1/NT迭代:r(t+1)=Mr(t)终止条件:|r(t+1)r(t)|1,接近于0证明:求矩阵的主特征向量,过程略。,简化模型面临的缺陷实际的网络超链接环境没有这么理想化,PageRank会面临两个问题:RankleakRanksink,网页排名图算法PageRank,简化模型,RankLeak,Rankleak:一个独立的网页如果没有外出的链接就产生排名泄漏解决办法:1.将无出度的节点递归地从图中去掉,待其他节点计算完毕后再加上2.对无出度的节点添加一条边,指向那些指向它的顶点,网页排名图算法PageRank,RankSink,Ranksink:整个网页图中若有网页没有入度链接,如节点A所示,其所产生的贡献会被由节点B、C、D构成的强联通分量“吞噬”掉,就会产生排名下沉,节点A的PR值在迭代后会趋向于0,网页排名图算法PageRank,不够准确,Ranksink的问题,Spidertrap爬虫圈套(一组网页的所有外链都指向组内的网页)整个网页图中的一组紧密链接成环的网页如果没有外出的链接就产生PR值沉降(Ranksink),Deadend,Spidertrap,PageRank的随机浏览模型,假定一个上网者从一个随机的网页开始浏览上网者不断点击当前网页的链接开始下一次浏览但是,上网者最终厌倦了,开始了一个随机的网页随机上网者用以上方式访问一个新网页的概率就等于这个网页的PageRank值这种随机模型更加接近于用户的浏览行为,网页排名图算法PageRank,随机浏览模型的图表示,设定任意两个顶点之间都有直接通路,在每个顶点处以概率d按原来蓝色方向转移,以概率1-d按红色方向转移。,网页排名图算法PageRank,随机浏览模型的邻接表表示,由于网页数目巨大,网页之间的连接关系的邻接矩阵是一个很大的稀疏矩阵采用邻接表来表示网页之间的连接关系随机浏览模型的PageRank公式:通过迭代计算得到所有节点的PageRank值。,网页排名图算法PageRank,随机浏览模型的矩阵表示,回顾简单模型的矩阵表示:R=HR随机浏览模型的矩阵表示:令:H=d*H+(1-d)*1/NNN则:R=HR其中R为列向量,代表PageRank值;H代表转移矩阵;d代表阻尼因子,通常设为0.85;d即按照超链进行浏览的概率;1-d为随机跳转一个新网页的概率仍然可以使用幂迭代算法,网页排名图算法PageRank,随机浏览模型,随机浏览模型的优点:更加符合用户的行为一定程度上解决了rankleak和ranksink问题保证PageRank存在唯一值,网页排名图算法PageRank,用MapReduce实现PageRank,Phase1:GraphBuilder建立网页之间的超链接图Phase2:PageRankIter迭代计算各个网页的PageRank值Phase3:RankViewer按PageRank值从大到小输出,网页排名图算法PageRank,Phase1:GraphBuilder,原始数据集:维基百科各网页间的链接信息。文本文件,共11.2G,每行包含一个网页名,及其所链接的全部网页名GraphBuilder目标:分析原始数据,建立各个网页之间的链接关系:Map:逐行分析原始数据,输出其中网页的URL作为key,PageRank初始值(PR_init)和网页的出度列表一起作为value,以字符串表示value,用特定的符号将二者分开。Reduce:输出该阶段的Reduce不需要做任何处理,网页排名图算法PageRank,Phase2:PageRankIter,输入文件:迭代计算PR值,直到PR值收敛或迭代预定次数输出文件?与输入文件相同:Map对上阶段的产生两种对:1.Foreachuinlink_list,输出其中u代表当前URL所链接到网页ID,并作为key;Cur_rank为当前URL的PageRank值,|link_list|为当前URL的出度数量,,cur_rank/|link_list|作为value。2.同时为了完成迭代过程,需要传递每个网页的链接信息在迭代过程中,必须保留网页的局部链出信息,以维护图的结构。,网页排名图算法PageRank,Phase2:PageRankIter,Reduce对Map输出的和多个做如下处理:其中为当前URL的链出信息;为当前URL的链入网页对其贡献的PageRank值计算所有val的和,并乘上d,在加上常数(1-d)/N得到new_rank。输出(URL,(new_rank,url_list)。迭代计算公式:PR(A)=(1-d)/N+d(PR(T1)/C(T1)+.+PR(Tn)/C(Tn),网页排名图算法PageRank,Phase2:PageRankIter,PageRankIter伪代码,网页排名图算法PageRank,Phase3:Rankviewer,PageRankViewer:将最终结果排序输出。PageRankViewer从最后一次迭代的结果读出文件,并将文件名和其PR值读出,并以PR值为key网页名为value,并且以PR值从大到小的顺序输出。排序过程中可以采用框架自身的排序处理,重载key的比较函数,使其经过shuffle和sort后反序(从大到小)输出,网页排名图算法PageRank,PageRank迭代终止条件,可选的终止条件:各网页的PageRank值不再改变;各网页的PageRank值排序不再变化;迭代至固定次数;,网页排名图算法PageRank,多趟MapReduce的处理,publicclassPageRankDriverprivatestaticinttimes=10;publicstaticvoidmain(Stringargs)throwsExceptionStringforGB=,args1+/Data0;forGB0=args0;GraphBuilder.main(forGB);StringforItr=Data,Data;for(inti=0;i0)csv+=“,”;csv+=val.toString();context.write(key,newText(csv);/输出key:cited专利号;value:“citing专利号1,citing专利号2,”,专利文献数据分析,专利被引列表(Citationdataset倒排)专利被引列表输出结果13964859,46472291000045391121000005031388100000647142841000007476669310000115033339100001739086291000026404305510000334190903,49759831000043409152310000444082383,40553711000045429057110000465918892,5525001,5609991,专利文献数据分析,专利被引次数统计MapClassIntWritableone=newIntWritable(1);publicstaticclassMapClassextendsMapperpublicvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedException/输入key:行偏移值;value:“citing专利号,cited专利号”数据对Stringcitation=value.toString().split(“,”);context.write(newText(citation1),one);/输出key:cited专利号;value:1,专利文献数据分析,专利被引次数统计ReduceClasspublicstaticclassReduceClassextendsReducerpublicvoidreduce(Textkey,Iterablevalues,Contextcontext)throwsIOException,InterruptedExceptionintcount=0;while(values.hasNext()count+=values.next().get();context.write(key,newIntWritable(count);/输出key:被引专利号;value:被引次数,专利文献数据分析,专利被引次数统计专利被引次数统计输出结果12100001100000110000061100000711000011110000171100002611000033210000431100004421000045110000463,专利文献数据分析,专利被引次数直方图统计目的:有的专利被引用一次,有的可能上百次,可以进行引用次数分布统计,最后可画出统计直方图基本思想是:扫描刚才产生的被引次数统计数据,忽略每一行中的专利号,仅考虑右侧的被引次数,看每种被引次数分别有多少次出现12(2,1)(2,3)100001(1,1)(1,9)1000001(1,1)10000061(1,1)(3,1)10000071(1,1)10000111(1,1)10000171(1,1)10000261(1,1)10000332(2,1)10000431(1,1)10000442(2,1)10000451(1,1)10000463(3,1),专利文献数据分析,专利被引次数直方图统计MapClasspublicstaticclassMapClassextendsMapperprivatefinalstaticIntWritableuno=newIntWritable(1);privateIntWritablecitationCount=newIntWritable();publicvoidmap(Textkey,Textvalue,Contextcontext)throwsIOException,InterruptedExceptioncitationCount.set(Integer.parseInt(value.toString();context.write(citationCount,uno);,专利文献数据分析,被引次数,出现1次,专利被引次数直方图统计ReduceClasspublicstaticclassReduceClassextendsReducerpublicvoidreduce(IntWritablekey,Iterablevalues,Contextcontext)throwsIOException,InterruptedExceptionintcount=0;while(values.hasNext()count+=values.next().get();context.write(key,newIntWritable(count);/输出key:被引次数;value:总出现次数,专利文献数据分析,专利被引次数直方图统计主类-CitationHistogrampublicclassCitationHistogrampublicstaticvoidmain(Stringargs)Configurationconf=newConfiguration();JobConfjob=newJobConf(conf,CitationHistogram.class);Pathin=newPath(args0);Pathout=newPath(args1);FileInputFormat.setInputPaths(job,in);FileOutputFormat.setOutputPath(job,out);job.setJobName(“CitationHistogram”);job.setMapperClass(MapClass.class);job.setReducerClass(ReduceClass.class);job.setInputFormat(KeyValueTextInputFormat.class);job.setOutputFormat(TextOutputFormat.class);job.setOutputKeyClass(IntWritable.class);job.setOutputValueClass(IntWritable.class);System.exit(job.waitForCompletion(true)?0:1);,专利文献数据分析,直接用Hadoop内置的KeyValue文本输入格式读取以key-value对形式保存的专利被引次数统计输出结果,专利被引次数直方图统计专利被引次数直方图统计结果,专利文献数据分析,192112825522463380319427843852108146163149712794181021559821261066634.4111605161316311633165416581678171617791,年份或国家专利数统计Patentdescriptiondataset“apat63_99.txt”“PATENT”,”GYEAR”,”GDATE”,”APPYEAR”,”COUNTRY”,”POSTATE”,”ASSIGNEE”,”ASSCODE”,”CLAIMS”,”NCLASS”,”CAT”,”SUBCAT”,”CMADE”,”CRECEIVE”,”RATIOCIT”,”GENERAL”,”ORIGINAL”,”FWDAPLAG”,”BCKGTLAG”,”SELFCTUB”,”SELFCTLB”,”SECDUPBD”,”SECDLWBD”3070801,1963,1096,”BE”,”,1,269,6,69,1,0,3070802,1963,1096,”US”,”TX”,1,2,6,63,0,3070803,1963,1096,”US”,”IL”,1,2,6,63,9,0.3704,3070804,1963,1096,”US”,”OH”,1,2,6,63,3,0.6667,3070805,1963,1096,”US”,”CA”,1,2,6,63,1,0,主要设计思想是:扫描以上的专利描述数据集,根据要统计的列名(年份或国家等),取出对应列上的年份(col_idx=1)或国家(col_idx=4),然后由Map发出(year,1)或(country,1),再由Reduce累加。,专利文献数据分析
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-广西-广西汽车驾驶与维修员二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西地质勘查员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东信号工-机车信号设备维修二级(技师)历年参考题库典型考点含答案解析
- 烹饪甜品基础知识培训班课件
- 2025年事业单位工勤技能-安徽-安徽堤灌维护工一级(高级技师)历年参考题库典型考点含答案解析
- 烹饪原料储存
- 烷烃的命名教学课件
- 2025年驾驶证考试-摩托车理论考试-摩托车驾驶证(科目一)历年参考题库典型考点含答案解析
- 热镀锌基本知识培训课件
- 热轧槽钢基础知识培训
- 品质管理工具:五大工具与七大手法
- 学习重庆小面合同协议
- 高考物理规范答题指导
- 叉车维修管理制度
- 国企保密管理制度
- 2025年山东威海城投集团子公司招聘工作人员19人自考难、易点模拟试卷(共500题附带答案详解)
- 野外作业安全知识培训
- 工程资质挂靠合作协议书范本
- 《贝叶斯估计》课件
- 2025重庆市建筑安全员《B证》考试题库及答案
- 2024年中交分包商培训参考答案
评论
0/150
提交评论