hadoop 倒排索引

【Hadoop基础教程】9、Hadoop之倒排索引 倒排索引是文档检索系统中最常用的数据结构,被广泛用于全文搜索引擎。它主要是用来存储某个单词(或词组)在一个文档或一组文档的存储位置的映射,即提供了一种根据内容来查找文档的方式。由于不是根据文档来确定文档所包含的内容,而是进行了相反的操作(根据关键字来查找文档),因而称为倒排索引(Inverted Index)。通常情况下,倒排索引由一个单词(词组)以及相关的文档列表(标示文档的ID号,或者是指定文档所在位置的URI) 阅读详情
  1. 倒排索引是文档检索系统中最常用的数据结构,被广泛的应用于全文搜索引擎。它主要用来存储某个单词(或词组),在一个文档或一组文档中的存储位置的映射,即提供了一种根据内容来查找文档的方式,由于不是根据文档来确定文档所包含的内容,而是进行了相反的操作,因而被称为倒排索引。  
  2. 这里感觉有点问题。就是在一个mapper里,处理来自同一个文件的内容才可以。否则combiner处理不正确。网上查了资料,如是说:我们知道InputFormat决定着InputSplit,每个InputSplit会分配给一个单独的Mapper,因此InputFormat决定了具体的Map task数量。
    如果是这样子,就正确。但是如何知道到底有多少个map task?不清楚...

[java]  view plain copy
  1. 假设在inversed.files中有file1,file2,file3文件,其内容分别如下:  
[java]  view plain copy
  1. file1:  
[java]  view plain copy
  1. dog cat  
  2. dog rabbit  
  3. tiger mice  
  4. goose chicken  
  5. rabbit fox  
[java]  view plain copy
  1. file2:  
[java]  view plain copy
  1. tiger donkey  
  2. lion fish  
  3. duck wolf  
  4. dog bird  
  5. cat bear  
[java]  view plain copy
  1. file3:  
[java]  view plain copy
  1. snake pig  
  2. lion  
  3. cat  
  4. elephant  
[java]  view plain copy
  1. 则进行倒排索引之后,其结果为:  
[java]  view plain copy
  1.   

bear file2:1 ,

bird file2:1 ,

cat file2:1 ,file1:1 ,file3:1 ,

chicken file1:1 ,

dog file1:2 ,file2:1 ,duck file2:1 ,dungkey file2:1 ,elephant file3:1 ,fish file2:1 ,fox file1:1 ,goose file1:1 ,lion file2:1 ,file3:1 ,mice file1:1 ,pig file3:1 ,rabbit file1:2 ,snake file3:1 ,tiger file2:1 ,file1:1 ,wolf file2:1 ,
[java]  view plain copy
  1.   
[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.util.StringTokenizer;  
  3.   
  4. import org.apache.hadoop.conf.Configuration;  
  5. import org.apache.hadoop.fs.Path;  
  6. import org.apache.hadoop.io.Text;  
  7. import org.apache.hadoop.mapreduce.Job;  
  8. import org.apache.hadoop.mapreduce.Mapper;  
  9. import org.apache.hadoop.mapreduce.Reducer;  
  10. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;  
  11. import org.apache.hadoop.mapreduce.lib.input.FileSplit;  
  12. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
  13.   
  14. public class InversedIndex {  
  15.       
  16.     /** 
  17.      * 将输入文件拆分, 
  18.      * 将关键字和关键字所在的文件名作为map的key输出, 
  19.      * 该组合的频率作为value输出 
  20.      * */  
  21.       
  22.     public static class InversedIndexMapper extends Mapper<Object, Text, Text, Text> {  
  23.           
  24.         private Text outKey = new Text();  
  25.         private Text outVal = new Text();  
  26.           
  27.         @Override  
  28.         public void map (Object key,Text value,Context context) {  
  29.             StringTokenizer tokens = new StringTokenizer(value.toString());  
  30.             FileSplit split = (FileSplit) context.getInputSplit();  
  31.             while(tokens.hasMoreTokens()) {  
  32.                 String token = tokens.nextToken();  
  33.                 try {  
  34.                     outKey.set(token + ":" + split.getPath());  
  35.                     outVal.set("1");  
  36.                     context.write(outKey, outVal);  
  37.                 } catch (IOException e) {  
  38.                     e.printStackTrace();  
  39.                 } catch (InterruptedException e) {  
  40.                     e.printStackTrace();  
  41.                 }  
  42.             }  
  43.         }  
  44.     }  
  45.       
  46.     /** 
  47.      * map的输出进入到combiner阶段,此时来自同一个文件的相同关键字进行一次reduce处理, 
  48.      * 将输入的key拆分成关键字和文件名,然后关键字作为输出key, 
  49.      * 将文件名与词频拼接,作为输出value, 
  50.      * 这样就形成了一个关键字,在某一文件中出现的频率的 key--value 对 
  51.      * */  
  52.     public static class InversedIndexCombiner extends Reducer<Text, Text, Text, Text> {  
  53.           
  54.         private Text outKey = new Text();  
  55.         private Text outVal = new Text();  
  56.           
  57.         @Override  
  58.         public void reduce(Text key,Iterable<Text> values,Context context) {  
  59.             String[] keys = key.toString().split(":");  
  60.             int sum = 0;  
  61.             for(Text val : values) {  
  62.                 sum += Integer.parseInt(val.toString());  
  63.             }  
  64.             try {  
  65.                 outKey.set(keys[0]);  
  66.                 int index = keys[keys.length-1].lastIndexOf('/');  
  67.                 outVal.set(keys[keys.length-1].substring(index+1) + ":" + sum);  
  68.                 context.write(outKey, outVal);  
  69.             } catch (IOException e) {  
  70.                 e.printStackTrace();  
  71.             } catch (InterruptedException e) {  
  72.                 e.printStackTrace();  
  73.             }  
  74.         }  
  75.           
  76.     }  
  77.       
  78.     /** 
  79.      * 将combiner后的key value对进行reduce, 
  80.      * 由于combiner之后,一个关键字可能对应了多个value,故需要将这些value进行合并输出 
  81.      * */  
  82.       
  83.     public static class InversedIndexReducer extends Reducer<Text, Text, Text, Text> {  
  84.           
  85.         @Override  
  86.         public void reduce (Text key,Iterable<Text> values,Context context) {  
  87.             StringBuffer sb = new StringBuffer();  
  88.             for(Text text : values) {  
  89.                 sb.append(text.toString() + " ,");  
  90.             }  
  91.             try {  
  92.                 context.write(key, new Text(sb.toString()));  
  93.             } catch (IOException e) {  
  94.                 e.printStackTrace();  
  95.             } catch (InterruptedException e) {  
  96.                 e.printStackTrace();  
  97.             }  
  98.         }  
  99.     }  
  100.       
  101.     public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {  
  102.         Configuration conf = new Configuration();  
  103.         Job job = new Job(conf,"index inversed");  
  104.           
  105.         job.setJarByClass(InversedIndex.class);  
  106.         job.setMapperClass(InversedIndexMapper.class);  
  107.         job.setCombinerClass(InversedIndexCombiner.class);  
  108.         job.setReducerClass(InversedIndexReducer.class);  
  109.         job.setMapOutputKeyClass(Text.class);  
  110.         job.setMapOutputValueClass(Text.class);  
  111.         job.setOutputKeyClass(Text.class);  
  112.         job.setOutputValueClass(Text.class);  
  113.           
  114.         FileInputFormat.addInputPath(job, new Path("inversed.files"));  
  115.         FileOutputFormat.setOutputPath(job, new Path("inversed.result"));  
  116.           
  117.         System.exit(job.waitForCompletion(true)?0:1);  
  118.           
  119.     }  
  120.   
  121. }  
Hadoop环境搭建及实现倒排索引 目 录 1.应用介绍 3 1.1实验环境介绍 3 1.2应用背景介绍 3 1.3应用的意义与价值 4 2.数据及存储 5 2.1数据来源及数据量 5 2.2数据存储解决方案 5 3.分析处理架构 5 3.1架构设计和处理方法 5 3.2核心处理算法代码 7 4.系统实现 9 5.总结 271.应用介绍 1.1实验环境介绍 本实验是在hadoo 阅读详情

相关推荐

Hadoop倒排索引原理解析

倒排索引源于实际应用中需要根据属性的值来查找记录,这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址,由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引,我查阅了很多资料去学习,下面是我自己对倒排索引的理解 假设我现在有两个文件 123.txt 和 456.txt,内容分别是 123.txt Hello world nice to meet you happ...

weixin_43311978的博客 762

Hadoop 倒排索引

当你把需要处理的文档上传到hdfs时,首先默认的TextInputFormat类对输入的文件进行处理,得到文件中每一行的偏移量和这一行内容的键值对做为map的输入。在改写map函数的时候,我们就需要考虑,怎么设计key和value的值来适合MapReduce框架,从而得到正确的结果。这就像百度里的搜索,你输入一个关键字,那么百度引擎就迅速的在它的服务器里找到有该关键字的文件,并根据频率和其他的一些策略(如页面点击投票率)等来给你返回结果。这个过程中,倒排索引就起到很关键的作用。

853

文件倒排索引算法及其hadoop实现

本文将以hadoop实现倒排索引 什么是文件的倒排索引? 简单讲就是一种搜索引擎的算法。过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词”和对应出现的“倒排文件”。

无名山丘,崛起成峰 4166

Hadoop系统应用之MapReduce相关操作【IDEA版】---经典案例“倒排索引、数据去重、TopN”

倒排索引是文档检索系统中最常用的数据结构,被广泛应用于全文搜索引擎。倒排索引主要用来存储某个单词(或词组)在一组文档中的存储位置的映射,提供了可以根据内容来查找文档的方式,而不是根据文档来确定内容,因此称为倒排索引(Inverted Index)。带有倒排索引的文件称为倒排索引文件,简称倒排文件(Inverted File)。

m0_57464618的博客 3588

基于Hadoop的带词频属性的文档倒排索引

Inverted Index(倒排索引)是目前几乎所有支持全文检索的搜索引擎都要依赖的一个数据结构。基于索引结构,给出一个词(term),能取得含有这个term的文档列表(the list of documents)。例如: 如果考虑单词在每个文档中出现的词频、位置、对应Web文档的URL等诸多属性,简单的倒排算法就不足以有效工作。我们把这些词频、位置等诸多属性称为有效负载(Payload)。

ifromearth的专栏 3189

hadoop学习-倒排索引

倒排索引是文档搜索系统中常用的数据结构。它主要用来存储某个词组在一个或多个文档中的位置映射。通常情况下,倒排索引由词组以及相关的文档列表组成。如下表所示。 表1:   单词      文档列表 单词1 文档1 文档2 文档3 单词2 文档2 文档4 文档5 单词3 文档3 文档5 文档6 倒排索引 从表1可以看出单

wenyusuran的专栏 1067

Hadoop 实战 | 倒排索引 InvertedIndex

通过倒排索引,检索系统能够以更高效的方式在大规模文档集合中定位包含特定词项的文档,从而为用户提供快速准确的搜索结果。当用户发起查询关键词时,需要扫描索引库中的所有文档,找出所有包含关键词的文档,在检索过程中效率较低。倒排索引(Inverted Index)是信息检索领域中的一种数据结构,它是一种反转(倒排)文档-词项关系的数据结构,以支持通过词项来查找相关文档。由于需要统计单词的来源文章,因此对于Mapper需要将生成的中间键值对由改为 ;

m0_62249876的博客 1727

hadoop倒排索引

hadoop倒排索引,注意参数的设置,可以在eclipse中直接编辑

Hadoop倒排索引(附带完整代码)

“倒排索引”是文档检索系统中最常用的数据结构,被广泛地应用于全文搜索引擎。它主要是用来存储某个单词(或词组)在一个文档或一组文档中的存储位置的映射,即提供了一种根据内容来查找文档的方式。由于不是根据文档来确定文档所包含的内容,而是进行相反的操作,因而称为倒排索引(Inverted Index) 1、实例描述 通常情况下,倒排索引由一个单词(或词组)以及相关的文档列表组成,文档列表中的文档或者是标识文档的ID号,或者是指文档所在位置的URL,如图一所示 ...

Allenzyg的博客 8396

Hadoop倒排索引程序

这是一个在hadoop集群环境下的文档倒排程序。数据源是莎士比亚文集(运行是需要设置)

山东大学大数据实验二:倒排索引(Hadoop实现)

这是山东大学大数据实验二,用Hadoop实现文档的倒排索引

hadoop–MapReduce倒排索引

hadoop–MapReduce倒排索引 1.倒排索引介绍 倒排索引是文档检索系统中最常用的数据结构,被广泛应用于全文搜索引擎。倒排索引主要用来存储某个单词(或词组)在一组文档中的存储位置的映射,提供了可以根据内容来查找文档的方式,而不是根据文档来确定内容,因此称为倒排索引(Inverted Index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(Inverted File)。 2.案例需求及分析 假设有三个源文件file1.txt,file2.txt,file3.txt,需要使用倒排

qq_41135504的博客 3433

简单的Hadoop分区和倒排索引示例

简单的Hadoop分区和倒排索引示例,需要有Hadoop分布式环境支撑。分区案例功能:分析通讯录文件,统计员工和科长的个数 根据职级分区,员工放一个文件,科长放一个文件。MyEclipse项目可以直接导入。

hadoop中倒排索引的实践

倒排索引是文档检索系统中最常用的数据结构,被广泛的应用于全文搜索引擎。它主要用来存储某个单词(或词组),在一个文档或一组文档中的存储位置的映射,即提供了一种根据内容来查找文档的方式,由于不是根据文档来确定文档所包含的内容,而是进行了相反的操作,因而被称为倒排索引。

鼻孔猫加油站 1154

基于知识图谱的电影推荐系统——Neo4j&Python

也可直接从这里下载:链接: https://pan.baidu.com/s/1l6wjwcUzy5G_dIlVDbCkpw 提取码: pkq6。修改main.py中的driver,输入自己数据库的用户名与密码。系统会询问是否需要重新加载并创建知识图谱,在第一次时输入1。

weixin_46351593的博客 6356

Fluent后台计算中Journal文件的自动化编写与优化实践

本文深入探讨了Fluent在Linux/Unix环境下进行后台计算时,Journal文件的自动化编写与优化实践。Journal文件作为Fluent后台计算的“灵魂”,是实现仿真流程自动化、保证计算可重复性与准确性的关键。文章从基础脚本骨架搭建、命令简写技巧,到进阶的参数化研究与批量计算实现,提供了详实的实战指南,帮助工程师大幅提升仿真效率。

postgres8guard的博客 757

你有想过,如何用Hadoop实现【倒排索引】?

写在前面: 博主是一名大数据的初学者,昵称来源于《爱丽丝梦游仙境》中的Alice和自己的昵称。作为一名互联网小白,写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样处于起步阶段的萌新。由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!个人小站:http://alices.ibilibili.xyz/ , 博客主页:https://alice.blog.youkuaiyun.com/ 尽管当前水平可能不及各位大佬,但我还是希望自己能够做得更好,因为一天的生活就是一生的缩影。.

大数据梦想家 4468

faster lio 回环 加入GTSAM优化的记录

对Faster lio 加入回环、gtsam优化,在室外建图遇到的问题和过程

Nico_jion的博客 2599

Hadoop之倒排索引

从上面的Map—> Combine ----> Reduce操作过程中,我们可以体会到“倒排索引”的过程其实也就是不断组合并拆分字符串的过程,而这也就是Hadoop中MapReduce并行计算的体现。在现今的大部分企业当中,Hadoop主要应用之一就是针对日志进行处理,所以想进军大数据领域的朋友,对于Hadoop的Map/Reduce实现原理可以通过更多的实战操作加深理解。转载于:https://www.cnblogs.com/SeaSky0606/p/4820786.html。

qq_46416934的博客 1073

LLMOps的崛起:如何利用Langfuse和Opik构建高效的模型监控与评估体系

本文探讨了LLMOps的崛起,详细介绍了如何利用Langfuse和Opik构建高效的模型监控与评估体系。通过开源工具Langfuse的全景监控方案和Opik的三层评估体系,帮助AI工程团队实现大语言模型的全生命周期管理,提升模型性能和迭代效率。文章还提供了实战技巧和工具链集成方案,助力企业优化AI应用。

ll5678的博客 680

oracle ebs form 10g安装教程

这个窗口需要想想,你要安装的类型,不要盲目点击“下一步”,因为一旦Oracle安装后,重新安装之前,需要卸载Oracle干净才能重新安装,有时还会出现错误。到了该窗口后,需要耐心等待安装,安装到一大半后,自动弹出一个窗口,让我们选择Oracle安装第2部分磁盘的路径,继续安装,然后坐等安装结束。自定义安装Oracle根目录,点击“下一步”按钮后,耐心等待几秒钟,工具自动加载产品列表,加载完后,自动跳转到“选择安装类型”窗口。注:等待几秒钟后,关闭dos窗口,不必惊慌,自动调转到安装界面。

XIELIUHAI001的博客 474

用hadoop实现倒排索引简单实例

用hadoop实现倒排索引简单实例倒排索引是文档搜索系统中常用的数据结构,即根据内容进行文档的搜索,本次我们利用mapReduce来分析和统计单词在每个文档中的权重,输入2个单词的txt文本,经过mapreduce的处理,将结果以{单词 1.txt:权重,2.txt:权重}逐行输出到output目录下。切记单个文件不要超过HDFS单个块的大小,保证一个文件一个split.否则会出现词频统计不完全。

lucky_ly的博客 3118

BES2700的PMU

BES2700ZP-BES2700芯片的PMU架构分析摘要:本文档分析了BES2700芯片的电源管理单元(PMU)架构。实际应用中仅需为VBAT引脚供电,其余电源均由芯片内部PMU提供。文档包含架构示意图、问题列表和参考链接,涉及PMU工作原理、外部供电要求等关键技术点。待解决问题包括具体供电参数和内部电源转换机制等。通过添加日志信息和代码片段,为开发人员提供了调试PMU功能的实用方法。

云淡风轻 119
上一篇: 上级倾向于把情况说得更恶劣...
下一篇: 流程图检索-相关-lucene
lightty
博客等级 码龄17年 59粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值