一.原理

目的:根据某个word来查找包含该word的document。

现在,假设有一个输入文件input.data,里面包含5篇document,该文件的具体内容如下:

doc1 Apache Spark Scala Hadoop Java C Python Do And Will KNN

doc2 SVM Scala News Play Akka Yes GBDT

doc3 LDA SVM RF GBDT Adaboost Kmeans KNN

doc4 QQ BAT I Great All LDA

doc5 Apache Hadoop MapReduce Git SVN SVM

文件每行包含一篇doc的标示符(如doc1)以及该doc中包含的word,并且doc与word之间以”\t”分隔,而word与word之间以空格符分隔。

现在,我们需要建立的倒排索引如下(从结果数据中取出的top 10):

(Akka,doc2)

(Python,doc1)

(QQ,doc4)

(RF,doc3)

(Apache,doc1|doc5)

(Will,doc1)

(Java,doc1)

(MapReduce,doc5)

(SVM,doc2|doc3|doc5)

(Scala,doc1|doc2)

(Git,doc5)

上述结果为k-v结构的pair对,key值为word,value为文档表示符,并且doc与doc之间以”|”分隔,以示区分。下面使用Spark来建立倒排索引。

二.实现

根据上面的分析,大概知道了该实例的目的,下面使用Scala编写Spark程序实现倒排索引。

/**

* Created by liudiwei on 2016-07-30.

*/

importorg.apache.spark.SparkContext

importorg.apache.spark.SparkConf

importorg.apache.spark.SparkContext._

importorg.apache.spark.SparkContext

importorg.apache.spark.rdd.RDD

importorg.apache.commons.configuration.{ PropertiesConfiguration => HierConf }

importorg.apache.spark.broadcast.Broadcast

object InvertedIndex{

def main(args : Array[String]){

val conf =newSparkConf().setAppName("invertedIndex")

.set("spark.serializer","org.apache.spark.serializer.JavaSerializer")

.set("spark.akka.frameSize","256")

.set("spark.ui.port","4071")

val sc =neworg.apache.spark.SparkContext(conf)

val cfg =newHierConf(args(0))

val inputfile = cfg.getString("inputfile")

val result = sc.textFile(inputfile)

.map(x => x.split("\t"))

.map(x => (x(0), x(1)))

.map(x => x._2.split(" ").map(y => (y, x._1)))

.flatMap(x => x)

.reduceByKey( (x, y) => x +"|"+ y)

result.collect.foreach(println)

sc.stop()

}

}

从上面的代码可以看出,在spark中,只需几个map操作再加上一个reduceByKey聚合函数就可以建立倒排索引,非常简洁,相比其他语言有很大的优势。整个代码的核心只有21-26行这一系列操作,可以说是非常精简。

三.参考文献

End.

作者:拾毅者

来源:『刘帝伟』维护的个人技术博客

本文均已和作者授权,如转载请与作者联系。

倒排索引c语言,Inverted Index(倒排索引)相关推荐

  1. Lucene Inverted index(倒排索引)原来快速入门

    Lucene是一个高性能的JAVA全文检索工具包,它使用的是倒排文件索引结构.该结构及相应的生成算法如下: 设有两篇文章1和2: 文章1的内容为:Tom lives in Guangzhou, I l ...

  2. 倒排索引 inverted index

    2019独角兽企业重金招聘Python工程师标准>>> 1.什么是倒排索引. e>>>(⊙o⊙)- 这是我见过最垃圾的翻译了,完全让人误解他的意思. 这个名称很容易 ...

  3. ElasticSearch 学习笔记(一):倒排索引(Inverted index)

    分析一个术语,要先从名称入手 倒排索引,英文原名Inverted index,大概因为 Invert 有颠倒的意思,就被翻译成了倒排.但是倒排这个名称很容易让人理解为从A-Z颠倒成Z-A.个人觉得翻译 ...

  4. MapReduce功能实现十---倒排索引(Inverted Index)

    MapReduce功能实现系列:       MapReduce功能实现一-Hbase和Hdfs之间数据相互转换       MapReduce功能实现二-排序       MapReduce功能实现 ...

  5. 斯坦福NLP笔记72 —— The Inverted Index

    2019独角兽企业重金招聘Python工程师标准>>> Inverted Index是信息抽取里最常用的数据结构,来看看他长啥样: Brutus指向数字X则代表X号文档中包含了Bru ...

  6. 【es】Elasticsearch:inverted index,doc_values及source

    文章目录 1.概述 2.Inverted index 3.Source 4.Doc_values 1.概述 转载:https://www.cnblogs.com/sanduzxcvbnm/p/1208 ...

  7. 反向索引(Inverted Index)

    转自:http://zhangyu8374.iteye.com/blog/86307 反向索引是一种索引结构,它存储了单词与单词自身在一个或多个文档中所在位置之间的映射.反向索引通常利用关联数组实现. ...

  8. inverted index

    Index是啥? 书后面的index实际上是inverted index,是用来查找的. 是一个词,出现在document的什么地方,page number.f(Word) returns a set ...

  9. 正排索引(forward index)与倒排索引(inverted index)

    一.正排索引(前向索引) 正排索引也称为"前向索引".它是创建倒排索引的基础,具有以下字段. (1)LocalId字段(表中简称"Lid"):表示一个文档的局部 ...

最新文章

  1. 2018 ACM-ICPC Asia Shenyang Regional Contest 题解(9 / 13)【每日亿题2021/2/24】
  2. 维基链连续3日暴涨接近100%,能否延续夏日神话?
  3. 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机科学理论
  4. Java——方法重载(overload)(比较两个数据是否相等)
  5. mysql5.0操作手册_MySQL 操作手册
  6. Open5GS:开源5G
  7. 远程访问服务器并登录LPAR,MySQL设置远程连接服务器
  8. failed to execute ‘dot‘, make sure the Graphviz executables are on your systems‘ PATH
  9. 绘制一幅蓝图_如何给新家绘制一张生活蓝图
  10. Tomcat部分目录作用
  11. PureMVC框架知识介绍
  12. zigbee网关 CC2530 zstack用手机显示终端传来的lm75a温度传感器的值
  13. 北上资金全透视月报:上月外资大幅流入,增持周期与消费(20210107).PDF
  14. 怎样架设游戏服务器 怎样搭建一个属于自己的游戏服 5分钟学会游戏架设 3D手游搭建视频教程 自己做游戏GM
  15. 基于linux的qos编程接口研究与分析,基于Linux的QoS编程接口研究与分析(2)
  16. c语言程序设计竞赛策划书,C语言程序设计策划书
  17. [Jexus系列] 一、安装并运行 Jexus
  18. python黑洞数——超简单方法O
  19. Python 二维离散傅里叶变换
  20. 音频剪辑软件电脑版使用方法

热门文章

  1. 【vscode】MarkDown 插入视频标签
  2. 奇妙的数学:蓝眼睛岛和强弱共识
  3. crontab每分钟执行一次任务
  4. 在我的网站   Φ十三月网Φ  开站前的宣传,当我是炒作,造势都可以,但是我们要的是有内涵。
  5. ACL(访问控制列表)
  6. matlab彩色图像的R、G、B三个分量以灰色和彩色的形式显示
  7. 项目管理:目标的价值表现的四个方面
  8. 全球6G产业及政策进展研究
  9. Android 65536 详解!
  10. GEE-Scholars MODIS地表温度LST时间变化趋势