Mapreduce 反向索引

反向索引主要用于全文搜索,就是形成一个word url这样的结构

file1:

MapReduce is simple

file2:

MapReduce is powerful is simple

file3:

Hello MapReduce bye MapReduce

那么经过反向索引后就是:

Hello     file3.txt:1;
MapReduce     file3.txt:2;fil1.txt:1;fil2.txt:1;
bye     file3.txt:1; 
is     fil1.txt:1;fil2.txt:2;
powerful     fil2.txt:1;
simple     fil2.txt:1;fil1.txt:1;

主要的方法就是,对每个文件的内容进行遍历,形成的key为word+filename,value=1然后在combiner中将key相同的进行累加,这样就得到在同一个文件中word的字数了。最后在reduce中将filename进行分割即可。不过这里有个小的bug,一般来说combiner是在同一个节点上进行reduce,但是我这里却是用于统计同一个文件了,如果说文件很大,那么很有可能一个文件的内容会被分配到两个不同的节点上,那么就有会bug了。所以这里只能适合小的文件。

PS:获得文件名String filename = ((FileSplit) context.getInputSplit()).getPath().getName();别的似乎没有了。

public class MyMapper extends Mapper<LongWritable, Text, Text, Text> {

public void map(LongWritable ikey, Text ivalue, Context context)

throws IOException, InterruptedException {

StringTokenizer st= new StringTokenizer(ivalue.toString());

FileSplit split=new FileSplit();

split = (FileSplit) context.getInputSplit();

InputSplit isplit=context.getInputSplit();

String filename = ((FileSplit) context.getInputSplit()).getPath().getName();

while(st.hasMoreTokens()){

//int splitIndex = split.getPath().toString().indexOf("file");

String key=st.nextToken()+":" +filename;

context.write( new Text(key),new Text("1"));

}

}

}

public class MyCombiner extends Reducer<Text, Text, Text, Text> {

public void reduce(Text _key, Iterable<Text> values, Context context)

throws IOException, InterruptedException {

// process values

int sum=0;

for (Text val : values) {

sum++;

}

StringTokenizer st= new StringTokenizer(_key.toString(),":");

String key=st.nextToken();

String value=st.nextToken();

value=value+ ":"+sum;

context.write( new Text(key),new Text(value));

}

}

public class MyReducer extends Reducer<Text, Text, Text, Text> {

public void reduce(Text _key, Iterable<Text> values, Context context)

throws IOException, InterruptedException {

// process values

String filelist= new String();

for (Text val : values) {

filelist=filelist+val.toString()+ ";  ";

}

context.write(_key, new Text(filelist));

//System.out.println(_key.toString()+filelist);

}

}

时间: 2025-01-09 08:49:12

Mapreduce 反向索引的相关文章

Oracle索引总结(三)- Oracle索引种类之反向索引

一 反向索引 1.1 反向索引的定义 反向索引作为B-tree索引的一个分支,主要是在创建索引时,针对索引列的索引键值进行字节反转,进而实现分散存放到不同叶子节点块的目的. 1.2 反向索引针对的问题 使用传统的B-tree索引,当索引的列是按顺序产生时,相应的索引键值会基本分布在同一个叶块中.当用户对该列进行操作时,难免会发生索引块的争用. 使用反向索引,将索引列的键值进行反转,实现顺序的键值分散到不同的叶块中,从而减少索引块的争用. 例如:键值1001.1002.1003,反转后1001.2

CM开发日志(四) - Solr 反向索引

什么是反向索引?(很多文章也称为倒排索引) 索引技术主要有以下3种: 反向索引,后缀数组和签名文件.其中, 反向索引技术在当前大多数的信息检索系统中得到了广泛的应用, 它对于关键词的搜索非常有效, 在lucene中也是使用的这种技术.后缀数组技术在短语查询中具有很快的速度, 但是这样的数据结构在构造和维护时都比较复杂一些.签名文件技术在20世纪80年代比较流行, 但是后来反向索引技术逐渐超越了它. 反向索引是目前搜索引擎公司对搜索引擎最常用的存储方式, 也是搜索引擎的核心内容, 反向索引源于实际

什么是反向索引

反向索引英文名叫做 Inverted index,顾名思义,是通常意义下索引的倒置. 举个例子: 我们用不同的数字索引不同的句子(比如以下三句在文本中是按照0,1,2的顺序排列的) 0 : "I love you" 1 : "I love you too " 2 : "I dislike you" 如果要用单词作为索引,而句子的位置作为被索引的元素,那么索引就发生了倒置: "I" : {0,1,2} "love&qu

Oracle 反向索引(反转建索引) 理解

一 反向索引 1.1 反向索引的定义 反向索引作为B-tree索引的一个分支,主要是在创建索引时,针对索引列的索引键值进行字节反转,进而实现分散存放到不同叶子节点块的目的. 1.2 反向索引针对的问题 使用传统的B-tree索引,当索引的列是按顺序产生时,相应的索引键值会基本分布在同一个叶块中.当用户对该列进行操作时,难免会发生索引块的争用. 使用反向索引,将索引列的键值进行反转,实现顺序的键值分散到不同的叶块中,从而减少索引块的争用. 例如:键值1001.1002.1003,反转后1001.2

其他 - 简述 反向索引

1. 概述 概述 简述 反向索引 也有人叫 倒排索引 场景 经常会出现在 搜索引擎 的后面 2. 生活中的索引 目录 格式 # 章节内容在哪一页 <content> -> <page> 字典 # 单词在哪一页 <word> -> <page> 思路 内容 在 哪个位置 3. 搜索引擎生成 倒排索引 的内容 英文 索引 生成 输入 文本 过滤 例如 html 标签 分词 时态 单复数 过滤 过滤一些没哈用的词 比如: a, an, the, thi

MapReduce/Hbase进阶提升(原理剖析、实战演练)

什么是MapReduce? MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性.他极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上. 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一

MapReduce编程(七) 倒排索引构建

一.倒排索引简介 倒排索引(英语:Inverted index),也常被称为反向索引.置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射.它是文档检索系统中最常用的数据结构. 以英文为例,下面是要被索引的文本: T0="it is what it is" T1="what is it" T2="it is a banana" 我们就能得到下面的反向文件索引: "a": {

MapReduce实战--倒排索引

本文地址:http://www.cnblogs.com/archimedes/p/mapreduce-inverted-index.html,转载请注明源地址. 1.倒排索引简介 倒排索引(Inverted index),也常被称为反向索引.置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射.它是文档检索系统中最常用的数据结构. 有两种不同的反向索引形式: 一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表. 一个单词的

MapReduce: 一种简化的大规模集群数据处理法

(只有文字没有图,图请参考http://research.google.com/archive/mapreduce.html) 翻译:风里来雨里去 原文:MapReduce: Simplified Data Processing on Large Clusters 作者:JeffreyDean and Sanjay Ghemawat 转载请保留以上信息 摘要 MapReduct是一个用于处理与生成大型数据集的编程模型及相关实现.用户分别指定一个map函数与一个reduce函数,由map函数处理一