MapReduce经典案例-倒排索引

一、案例分析

1.倒排索引介绍

倒排索引是文档检索系统中最常用的数据结构,被广泛应用于全文搜索引擎。倒排索引主要用来存储某个单词(或词组)住一组文档中的存储位置的映射,提供了可以根据内容来查找文档的方式,而不是根据文档来确定内容,因此称为倒排索引(Inverted Index)。带有倒排索引的文件称为倒排索引文件,简称倒排文件(Inverted File)。
通常情况下,倒排文件由一个单词(或词组)和相关联的文档列表组成。如图所示。
在这里插入图片描述
从图可以看出,建立倒排索引的目的是为了更加方便地搜索。例如,单词1出现在文档1、文档4、文档13等文档中;单词2出现在文档2、文档6、文档10等文档中;而单词3出现住文档3、文档7等文档中。
在实际应用中,还需要给每个文档添加一个权值,用来指出每个文档与搜索内容的相关度,最常用的是使用词频作为权重,即记录单词或词组在文档中出现的次数。用户在搜索相关文档时,就会把权重高的推荐给客户。
下面以英文单词倒排索引为例。
在这里插入图片描述
上图可以看出,加权倒排索引文件中,每一行内容对每一个单词进行了加权索引,统计出单词出现的文档和次数。例如索引文件中的笫一行,表示“Hadoop”这个单词在文本filel.txt中出现过1次,在file4.txt中出现过2次,在filel3.txt中出现过1次。

2.案例需求及分析

  • 现假设有3个源文件filel.txt、file2.txt和file3.txt.需要使用倒排索引的方式对这3个源文件内容实现倒排索引,并将最后的倒排索引文件输出,整个过程要求实现如下转换。
    在这里插入图片描述

    接下来,根据上面案例的需求结合倒排索引的实现,对该倒排索引案例的实现进行分析,具体如下:
    (1) 首先使用默认的TextlnputFormat类对每个输入文件进行处理,得到文本中每行的偏移量及其内容,Map过程中先分析输人的<key,value>键值对,经过处理可以得到倒排索引中需要的3个信息:单词、文档名称和词频。
    在这里插入图片描述
    从图可以看出,在不使用Hadoop 自定义数据类型的悄况下,需要根据情况将单词与文档名称拼接为一个key(如"MapReduce:filel. txt").将词频作为一个value。
    (2) 经过Map阶段数据转换后,同一个文档中相同的单词会出现多个的情况,而单纯依靠后续Reduce阶段无法同时完成词频统计和生成文档列表,所以必须增加一个Combine阶段,先完成每一个文档的词频统计。如图所示。
    在这里插入图片描述
    从图可以看出,在Reduce阶段,根据前面的分析先完成每一个文档的词频统计,然后又对输入的<key,value>键值对进行了重新拆装,将单词作为key,文档名称和词频组成一个value (如“filel.txt:l”)。这是因为,如果直接将词频统计后的的输出数据(如“MapReduce:filel.txt ”)作为下一阶段Reduce过程的输入,那么在Shuffle过程时将面临一个问题:所有具有相同单词的记录应交由同一个Reducer处理,但当前的key值无法保证这一点,所以对key值和value值进行重新拆装。这样做的好处是可以利用MapReduce框架默认的HashPartilioncr类完成Shuffle过程,将相同单词的所有记录发送给同一个Reducer进行处理。
    (3)经过上述两个阶段的处理,Reduce阶段只需将所有文件中相同key值的value值进行统计,并组合成倒排索引文件所需的格式即可,如图所示。
    在这里插入图片描述
    从图可以看出,在Reduce阶段会根据所有文档中相同key进行统计,同时在处理过程中结合倒排索引文件的格式需求就可以生成对应的文件。

二、案例实现

在完成对倒排索引的相关介绍以及案例实现的具体分析后,接下来通过前面说明的案例分析步骤来实现具体的倒排索引。具体实现步骤如下。

1. Map阶段实现

打开之前创建的Maven项目 HadoopDemo,并新创建com.njci.mr.invertedlndex包,在该路径下编写自定义 Mapper 类 InvertedlndexMapper。
在这里插入图片描述
代码的作用是将文本中的单词按照空格进行切割,并以冒号拼接,“单词:文档名称”作为key,单词次敎作为value,都以文本方式输出至Combine阶段。

2. Combine阶段实现

根据Map阶段的输出结果形式.在com.njci.mr.Invertedlndex包下,自定义实现Combine阶段的类InvertedlndexCombiner.对每个文档的单词进行词频统计。
在这里插入图片描述
代码的作用是对Map阶段的单词次数聚合处理,并直新设置key值为单词,value值由文档名称和词频组成。

3. Reduce阶段实现

根据Combine阶段的输出结果形式,同样在com.njci.mr.Invertedlndex包下自定义 Reducer 类 InvertedlndexMapper。
在这里插入图片描述
代码的作用是,接收Combine阶段输出的数据,并最终案例倒排索引文件需求的样式,将单词作为key,多个文档名称和词频连接作为value,输出到目标目录。

4. Driver程序主类实现

编写MapReduce程序运行主类InvertedlndexDriver.java。
在这里插入图片描述
以上代码的作用是设置MapReduce工作任务的相关参数。由于本次演示的数据量较小。为了方便、快速进行案例演示,本案例采用了本地运行模式,对指定的本地D:\Inverledlndex\input 目录下的源文件(需耍提前准备)实现倒排索引,并将结果输入到本地D:\lnvertedlndex\output目录下,设置完毕后,运行程序即可。

5. 效果测试

在这里插入图片描述
现在本地D:\Inverledlndex\input 目录下创建 filel.txt、file2.txt 和 file3.txt。内容如之前所示。
接着执行MapReduce程序的程序入口 InvertedlndexDriver类,正常执行完成后,会在指定的D:\lnvertcdlndex\output下生成结果文件。

展开阅读全文

Python数据分析与挖掘

01-08
92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元   为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。    本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。   二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。   三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。   四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。   五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
©️2020 CSDN 皮肤主题: 游动-白 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值