【大数据】实验三 文档倒排索引算法

实验三 文档倒排索引算法

151220129 计科 吴政亿 nju_wzy@163.com

151220130 计科 伍昱名 707512433@qq.com

151220135 计科 许丽军 xulj.cs@gmail.com

151220142 计科 杨楠 1158864287@qq.com

1 实验目的

  1. 应用课堂上介绍的“带词频属性的文档倒排算法”

  2. 在统计词语的倒排索引时,除了要输出带词频属性的倒排索引,还请计算每个词语的“平均提及次数”并输出。

    平均提及次数= 词语在全部文档中出现的频数总和/ 包含该词语的文档数

  3. 两个计算任务请在同一个MapReduce Job中完成,输出时两个内容可以混杂在一起。

  4. 输入输出文件的格式和其他具体要求请见FTP上“实验要求”文件夹下对应的PDF文档。

2 实验原理

倒排索引算法是wordcount的扩展问题,他需要统计一个单词在所有文件中各自出现的次数,直观的,我们可以设计一种Mapper和Reducer

class mapper
    for each word in file
        key = word
        value = {filename , 1}

calss reducer
    for each value in Values
        key += {filename, value}

但是这种方法过于朴素,为了降低mapper和reducer的传输开销与存储开销,我们应用了combiner在每次mapper结束后进行一次reducer,将结果汇总。

class Mapper
    procedureMap(docid dn, doc d)
        F ← new AssociativeArray
        for all term t ∈doc d do
            F{t} ← F{t} + 1
        for all term t ∈Fdo
            Emit(term t, posting <dn, F{t}>)
class Reducer
    procedureReduce(term t, postings [<dn1, f1>, <dn2, f2>…])
        P← new List
        for all posting <dn, f> ∈postings [<dn1, f1>, <dn2, f2>…] do
            Append(P, <dn, f>)
        Sort(P)
        Emit(term t; postings P)

然而,这样会有一个新的问题:

当对键值对进行shuffle处理以传送给合适的Reducer时,将按照新的键

Class NewPartitionerextends HashPartitioner<K,V>
// org.apache.hadoop.mapreduce.lib.partition.HashPartitioner
{ // override the method
    getPartition(Kkey, Vvalue, intnumReduceTasks)
    { 
        term = key.toString().split(“,”)[0]; //<term, docid>=>term
        super.getPartition(term, value, numReduceTasks);
    }
}
Set the customized partitionerin job configuration
Job. setPartitionerClass(NewPartitioner)

3 实验代码

3.1 实验思路

  1. 分别统计各个文件各行各个词的出现次数,最后汇总。
  2. 用map统计输入行各个词的出现次数,在combine的时候将相同词的出现次数合并,partion根据词进行划分,reduce时将各个词在不同文件的出现次数进行汇总

3.2 代码解释

Class NameDivisionClass Information
LineCombiner许丽军将不同行的所有相同词的map输出在本地将出现次数相加,得到的即是词在某个文件的一个map输入的出现次数的输出
WordPartition许丽军以词而非词加文件名为基准进行划分决定reduce的输入
InvertedIndexReducer吴政亿、伍昱名在类中使用prevWord记录上一次输入的词,sum_of_frequency记录词在文件中的总出现次数,num_of_file记录词出现的文件个数,postings记录最后输出的(小说:词频)。因为reduce得到的输入是排过序的,由此对每一个输入判断是否是和上一个词相同,如果不是,输出词和postings,重新设置上述变量值。否则正常更新上述变量
InvertedIndexMapper许丽军、杨楠以词为key,出现次数为value建立hash表,对输入行的每个单词判断是否在hash表中,如果在则将出现次数加一,否则插入hash表中置出现次数为1,处理完输入后再hash表转换为(词+“,”+文件名,出现次数)输出
main许丽军设置MapReduce各个部分所需的类

4 实验结果

4.1 部分截图

实验结果-201855

实验结果

4.2 存放路径

存放路径:/user/2018st03/task2_out

5 实验总结

性能扩展性等方面可能存在的不足和可能的改进之处

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值