第3节 mapreduce高级:4、倒排索引的建立

倒排索引建立

需求分析

需求:有大量的文本(文档、网页),需要建立搜索索引

最终实现的结果就是哪个单词在哪个文章当中出现了多少次

思路分析:

首选将文档的内容全部读取出来,加上文档的名字作为key,文档的value为1,组织成这样的一种形式的数据

map端数据输出

hello-a.txt 1
tom-a.txt 1
hello-a.txt 1
jerry-a.txt 1

到reduce阶段
hello-a.txt <1,1>

reduce端数据输出

hello-a.txt 2

tom-a.txt 1

jerry-a.txt 1

代码:

IndexMain:。。。
TextInputFormat.addInputPath(job,new Path("file:///D:\\Study\\BigData\\heima\\stage2\\5、大数据离线第五天\\倒排索引\\input"));
TextOutputFormat.setOutputPath(job,new Path("file:///D:\\Study\\BigData\\heima\\stage2\\5、大数据离线第五天\\倒排索引\\out_index"));。。。
IndexMapper:
package cn.itcast.demo2.index;

import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.lib.input.FileSplit;

import java.io.IOException;

public class IndexMapper extends Mapper<LongWritable,Text,Text,LongWritable> {    @Override    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        //判断数据是从哪个文件里面来的        //获取文件的切片        FileSplit inputSplit = (FileSplit) context.getInputSplit();        //获取到了我们的文件名        String name = inputSplit.getPath().getName();

        String line = value.toString();        String[] split = line.split(" ");        for(String word:split){            //输出格式:tom-b.txt   1            context.write(new Text(word+"-"+name),new LongWritable(1L));        }    }}
IndexReducer:
package cn.itcast.demo2.index;

import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class IndexReducer extends Reducer<Text,LongWritable,Text,LongWritable> {    @Override    protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {        long num = 0L;        for(LongWritable longWritable:values){            num++;        }        context.write(key,new LongWritable(num));    }}

原文地址:https://www.cnblogs.com/mediocreWorld/p/11031111.html

时间: 2024-08-30 02:29:43

第3节 mapreduce高级:4、倒排索引的建立的相关文章

第3节 mapreduce高级:2、3、课程大纲&amp;共同好友求取步骤一、二

第五天课程大纲:1.社交粉丝的数据分析:求共同好友2.倒排索引的建立3.自定义inputFormat合并小文件 4.自定义outputformat5.分组求topN6.MapReduce的其他补充 了解7.mapreduce的参数优化 理解8.yarn的资源调度管理 例子1:社交粉丝数据分析 逻辑分析 以下是qq的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的,即A的好友列表中有B,但B可能把A删除了) A:B,C,D,F,E,O B:A,C,E,K C:F,

mapreduce 高级案例倒排索引

理解[倒排索引]的功能 熟悉mapreduce 中的combine 功能 根据需求编码实现[倒排索引]的功能,旨在理解mapreduce 的功能. 一:理解[倒排索引]的功能 1.1 倒排索引: 由于不是根据文档来确定文档所包含的内容,而是进行相反的操作,因而称为倒排索引 简单来说根据单词,返回它在哪个文件中出现过,而且频率是多少的结果.例如:就像百度里的搜索,你输入一个关键字,那么百度引擎就迅速的在它的服务器里找到有该关键字的文件,并根据频率和其他一些策略(如页面点击投票率)等来给你返回结果

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

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

大数据技术之_05_Hadoop学习_04_MapReduce_Hadoop企业优化(重中之重)+HDFS小文件优化方法+MapReduce扩展案例+倒排索引案例(多job串联)+TopN案例+找博客共同粉丝案例+常见错误及解决方案

第6章 Hadoop企业优化(重中之重)6.1 MapReduce 跑的慢的原因6.2 MapReduce优化方法6.2.1 数据输入6.2.2 Map阶段6.2.3 Reduce阶段6.2.4 I/O传输6.2.5 数据倾斜问题6.2.6 常用的调优参数6.3 HDFS小文件优化方法6.3.1 HDFS小文件弊端6.3.2 HDFS小文件解决方案第7章 MapReduce扩展案例7.1 倒排索引案例(多job串联)7.2 TopN案例7.3 找博客共同粉丝案例第8章 常见错误及解决方案 第6章

MapReduce编程之倒排索引

任务要求: //输入文件格式 18661629496 110 13107702446 110 1234567 120 2345678 120 987654 110 2897839274 18661629496 //输出文件格式格式 11018661629496|13107702446|987654|18661629496|13107702446|987654| 1201234567|2345678|1234567|2345678| 186616294962897839274|2897839274

MapReduce高级特性

计数器 因为计数器的查看往往比查看集群日志来的方便快捷 所以有些情况下计数器信息比集群日志更加有效 用户自定义的计数器 关于Hadoop的内置计数器的介绍可以参考Hadoop权威指南第九章MapReduce Features中的Build-in Counts小节 这里限于篇幅不再说明 MapReduce允许用户在程序中使用枚举或者字符串的格式类自定义计数器 一个作业可以定义的计数器不限,使用枚举类型时 枚举类型的名称即为组名,枚举类型的字段即为计数器名 计数器是全局的,会跨越所有Mapper和R

MapReduce高级编程2

MapReduce Top N .二次排序,MapJoin: TOP N 对于一组输入List(key,value),我们要创建一个Top N 列表,这是一种过滤模式,查看输入数据特定子集,观察用户的行为. 解决方案 key是唯一键,需要对输入进行额外的聚集处理,先把输入分区成小块,然后把每个小块发送到一个映射器中.每个映射器会创建一个本地Top N 列表发送到一个规约器中,即最终由一个规约其产生一个Top N 列表.对于大多数的MapReduce算法,由一个规约器接收所有数据会使负载不均衡,从

第2节 mapreduce深入学习:7、MapReduce的规约过程combiner

每一个 map 都可能会产生大量的本地输出,Combiner 的作用就是对 map 端的输出先做一次合并,以减少在 map 和 reduce 节点之间的数据传输量,以提高网络IO 性能,是 MapReduce 的一种优化手段之一. ?   combiner 是 MR 程序中 Mapper 和 Reducer 之外的一种组件 ?   combiner 组件的父类就是 Reducer ?   combiner 和 reducer 的区别在于运行的位置: Combiner 是在每一个 maptask

第2节 mapreduce深入学习:8、手机流量汇总求和

例子:MapReduce综合练习之上网流量统计. 数据格式参见资料夹 需求一:统计求和 统计每个手机号的上行流量总和,下行流量总和,上行总流量之和,下行总流量之和 分析:以手机号码作为key值,上行流量,下行流量,上行总流量,下行总流量四个字段作为value值,然后以这个key,和value作为map阶段的输出,reduce阶段的输入. data_flow.dat内容类似下面的: 1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196.1