十二、用MapReduce完成类似倒排索引的功能

Spark(35) -- SparkStreaming -- 概述 1. Streaming 应用场景 2. Lambda 架构 3. Streaming 计算模式 4. SparkStreaming 计算思想 5. 什么是Spark Streaming 6. 为什么要学习Spark Streaming 7. SparkStreaming与Storm的对比 阅读详情


1)理解【倒排索引】功能
2)熟悉 MapReduce 中的 Combiner 功能
3)依据需求编码实现【倒排索引】功能,旨在对 MapReduce理解。
数据:


结果:

代码:

package com.hyhc.mr;
 
import java.io.IOException;
 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
importorg.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
 
 
publicclass InvertedIndexMapReduce extends Configured implements Tool{
//url:key1->10
//url:key2->12
//url1:key2->3
    publicstaticclass IndexMapper extends
       Mapper<LongWritable,Text,Text,Text>{
       private Text mapOutputKey = new Text();
       private Text mapOutputValue = new Text("1");
       @Override
       publicvoid map(LongWritable key, Text value, Context context)
              throws IOException, InterruptedException {
           String lineValue=value.toString();
           String strs[]=lineValue.split("##");
           String url = strs[0] ;
           String title = strs[1] ;
           String content = strs[2] ;
           String[] tstrs = title.split(" ") ;
           for(String ts : tstrs){
              mapOutputKey.set(ts+","+url);
              context.write(mapOutputKey, mapOutputValue);
           }
           String[] cstrs = content.split(" ") ;
           for(String cs : cstrs){
              mapOutputKey.set(cs+","+url);
              context.write(mapOutputKey, mapOutputValue);
           }
        }
    }
   
    publicstaticclass  IndexCombiner extends
    Reducer<Text,Text,Text,Text>{
    private Text combinerOutoutKey = new Text() ;
    private Text combinerOutputValue = new Text();
   
    @Override
    publicvoid reduce(Text key, Iterable<Text> values,
           Context context)
           throws IOException, InterruptedException {
      
       String keys[]=key.toString().split(",");
       combinerOutoutKey.set(keys[0]);
       intsum = 0 ;
       for(Text value : values){
           sum += Integer.parseInt(value.toString());
       }
       combinerOutputValue.set(keys[1]+"->"+sum);
       context.write(combinerOutoutKey, combinerOutputValue);
    }
}
    publicstaticclass IndexReducer extends
       Reducer<Text,Text,Text,Text>{
       private Text outputKey = new Text() ;
       private Text splitline = new Text("----------------");
       private Text splitline1 = new Text("----------------------------------------");
       @Override
       publicvoid reduce(Text key, Iterable<Text> values,
              Context context)
              throws IOException, InterruptedException {
           outputKey.set("key:"+key);
           context.write(outputKey, null);
           context.write(splitline, null);
           for(Text value : values){
              context.write(null, value);
           }
           context.write(splitline1, null);
       }
    }
    publicint run(String[] args) throws Exception {
       Configuration configuration = super.getConf() ;
       Job job = Job.getInstance(
           configuration,
           this.getClass().getSimpleName()
       );
       job.setJarByClass(this.getClass());
       Path inPath = new Path(args[0]) ;
       FileInputFormat.addInputPath(job, inPath);
       job.setMapperClass(IndexMapper.class);
       job.setMapOutputKeyClass(Text.class);
       job.setMapOutputValueClass(Text.class);
       job.setCombinerClass(IndexCombiner.class);
       job.setReducerClass(IndexReducer.class);
       job.setOutputKeyClass(Text.class);
       job.setOutputValueClass(Text.class);
       Path outPath = new Path(args[1]);
       FileOutputFormat.setOutputPath(job, outPath);
       booleanisSuccess = job.waitForCompletion(true);
       returnisSuccess ? 0 : 1 ;
    }
   
    publicstaticvoid main(String[] args) throws Exception {
       Configuration configuration = new Configuration();
       intstatus = ToolRunner.run(//
           configuration, //
           new InvertedIndexMapReduce(), //
           args
       ) ;
       System.exit(status);
    }
}
 

文档倒排索引的MapReduce程序设计与实现 立即下载

相关推荐

避开命令行!在VMware vCenter 8.0图形化界面里搞定SSL证书续期全流程

本文详细介绍了在VMware vCenter 8.0图形化界面中完成SSL证书续期的全流程,包括计算机SSL证书、VMCA根证书和STS证书的管理。通过可视化操作,管理员无需使用命令行即可高效处理证书问题,确保vSphere环境的稳定运行。文章还提供了证书监控与预警配置的实用技巧,帮助用户提前规避证书过期风险。

weixin_27051161的博客 282

mapreduce程序详解

package exp1.hadoop; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.L

yuanlin9007的博客 373

Win10平台下QT6.9.0 OpenCV 4.10.0从入门到精通

我最近开发一个视觉项目,我们从0开始记录在windows 10下 用QT6.9+OpenCV 4.10.0搞定整个项目的开发过程。以抛砖引玉,大家共同进步。

fds111111的博客 1712

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

前言:"倒排索引"是文档检索系统中最常用的数据结构,被广泛地应用于全文搜索引擎。它主要是用来存储某个单词(或词组)在一个文档或一组文档中的存储位置的映射,即提供了一种根据内容来查找文档的方式。由于不是根据文档来确定文档所包含的内容,而是进行相反的操作,因而称为倒排索引(Inverted Index) 1.模拟数据: [hadoop@h71 q1]$ vi file1.txt mapr

小强签名设计 的博客 1万+

OpenMV模块视觉测距(避障)+颜色识别+TFT-LCD显示(实现原理与代码分析)

上图所示代码实际运行的帧率比较低,主要原因有以下两个:1.硬件问题,博主使用的版本比较低,可以尝试使用高版本OpenMV2.图像滤波问题。之前加入图像滤波是想提高色块识别的准确性,但是相应的运算速度也会下降。

ediykk的博客 1万+

AUTOSAR RTE配置实战:从ECU分区到Task映射的完整指南

本文提供了一份AUTOSAR RTE配置的完整实战指南。从创建ECU分区、定义OS任务,到实现Runnable Entity与Task的精确映射,详细解析了每一步的操作要点与常见陷阱。文章结合配置工具界面,旨在帮助开发者高效完成RTE配置,确保系统实时性与数据一致性,是掌握AUTOSAR核心开发流程的实用参考。

weixin_29228203的博客 485

自定义实现mapreduce计算的value类型

通过实现org.apache.hadoop.io.Writable接口定义一个自定义的Writable类型,来实现mapreduce计算的自定义value类型,

bear 2623

宝塔部署若依前端出现502解决方法

若依系统是一个基于Java语言的开源项目,旨在帮助开发者减少开发时间,特别适用于需要快速开发出一套具有用户管理、菜单管理、权限管理、定时任务、日志管理等功能的简单系统。系统分为前后端分离、分布式等架构前后端分离部署教程然而通过宝塔来部署若依系统会遇见一些问题,特此在这里记录一下。

m0_74823683的博客 776

一个经典的MapReduce模板代码,倒排索引(ReverseIndex)

问题描述:统计某个号码被哪些号码呼叫了 输入文件如下: 13588888888 112 13678987879 13509098987 18987655436 110 2543789 112 15699807656 110 011-678987 112 说明:每一行为一条电话通话记录,左边的号码(记为a)打给右边的号码(记为b号码),中间用空格隔开 要求: 将以上...

听风居士 484

手把手教你为高云DDR3控制器添加物理约束:从位置锁定到参数配置

本文详细介绍了在高云FPGA平台上为DDR3控制器添加物理约束的实战指南,从位置锁定到参数配置。通过解析高云DDR3控制器的架构,提供关键模块的位置约束和参数调优方法,帮助开发者解决时序不稳定、初始化失败等常见问题,实现稳定可靠的DDR3接口。

weixin_33738555的博客 275

FDTD远场分析实战:从monitor数据到3D远场可视化的完整流程

本文详细介绍了FDTD远场分析的完整流程,从monitor采集的近场数据出发,通过近场-远场变换(NFFFT)生成3D远场可视化结果。文章重点解析了远场转换的物理原理、关键参数设置,并提供了构建稳健数据处理流水线及高级可视化(如3D辐射方向图)的实战脚本与技巧,适用于天线设计与光学器件分析。

weixin_29063035的博客 228

海量数据处理实战指南:分治、Bitmap、Bloom Filter、外排序等十大经典套路与面试真题全解

> 本文是 Learn-Algorithms 仓库中 [海量数据处理](https://link.gitcode.com/i/271f00a0525a440da0e6e0a2373de309) 笔记的完整展开。当数据量大到"时间上算不完、空间上装不下"时,本指南将带你掌握一套可复用的解题框架——先估算数据规模,再按"Hash 映射 + 分而治之"切小问题,用 hash_map / Trie 树 /

gitblog_00580的博客 1002

26、遥感图像无监督变化检测方法解析

本文详细解析了遥感图像中的无监督变化检测方法,重点介绍了基于快速模糊 C-均值聚类的无监督变化检测方法(CDFFCM)在滑坡映射中的应用。CDFFCM 方法利用图像结构信息和高斯金字塔技术,提高了检测的准确性,减少了参数数量,并缩短了计算时间。该方法通过与传统方法的对比,展现出在高分辨率遥感图像滑坡检测中的显著优势。此外,文章还探讨了 CDFFCM 的未来发展趋势,包括技术融合、多模态数据应用以及智能化与自动化方向。

game4的博客 149

三面头条,靠两本算法pdf书籍,轻松拿到offer

头条一面(Java+项目) 1.倒排索引 2.讲讲redis里面的哈希表? 3.happen-before的规则? 4.volatile修饰符,synchronize锁 5.java单例模式的实现,懒汉、饿汉? 6.进程与线程的区别,多进程和多线程的区别? 7.HashMap原理,为什么用红黑树,红黑树的特点? 8.快排时间空间复杂度,最好最坏的情况,优化方案? 9.TCP的拥塞控制,具体过程是怎么样的?UDP有拥塞控制吗?如何解决? 10.讲讲了解的垃圾回收算法和回收器,什么时候执行STOP THE WO

代码界的扛把子 99

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Flume配置大全

博客园 首页 新随笔 联系 订阅 管理 随笔-37 评论-6 文章-0 随笔分类 - Hadoop Hadoop Hadoop实战-Flume之自定义Sink(十九) 摘要: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.flume.Channel; i...

程序员蒋老湿的博客 644

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

三面头条,靠P9级算法技术官分享的两本算法pdf书籍,轻松拿到offer

头条一面(Java+项目) 1.倒排索引 2.讲讲redis里面的哈希表? 3.happen-before的规则? 4.volatile修饰符,synchronize锁 5.java单例模式的实现,懒汉、饿汉? 6.进程与线程的区别,多进程和多线程的区别? 7.HashMap原理,为什么用红黑树,红黑树的特点? 8.快排时间空间复杂度,最好最坏的情况,优化方案? 9.TCP的拥塞控制,具体过程是怎么样的?UDP有拥塞控制吗?如何解决? 10.讲讲了解的垃圾回收算法和回收器,什么时...

m0_63437643的博客 641

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

海量数据面试题分析策略及对应知识点Blog汇总+10道海量数据面试题解答(仅供参考)

文章一:MapReduce技术的初步了解与学习   文章二:从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) http://blog.youkuaiyun.com/v_july_v/article/details/6704077   文章三:海量数据处理之Bloom Filter详解 http://blog.youkuaiyun.com/v_july_v/article/d

zhongwen7710的专栏 1243

三面头条,靠P9级算法大牛分享的两本算法pdf书籍,轻松拿到offer

这次的笔试里总共有5道,我AC了2.5题,第一题90%,第二题90%,第三题70%,不算好,但勉强通过了。笔试算法题不同于面试算法,不会直白跟你说要使用哪种算法去解答,更多的要自己学会抽象,抛开题目本身,要明白内部讲的是什么,别被题目的糖衣炮弹迷惑了。这边可以从项目用到的技术栈出发,去寻找技术栈在项目中会存在的难点,然后套进自己的项目,找个自己能懂,最好能全懂的。比如关于树的题型,链表的,数组等等,观察它们的解题思路,总结出解题套路。9.TCP的拥塞控制,具体过程是怎么样的?它与Kylin的区别?

m0_63437643的博客 804

最新三面头条,小编靠P9级算法大牛分享的两本算法pdf书籍,助你轻松拿到offer!!!

1.倒排索引2.讲讲redis里面的哈希表?3.happen-before的规则?4.volatile修饰符,synchronize锁5.java单例模式的实现,懒汉、饿汉?6.进程与线程的区别,多进程和多线程的区别?7.HashMap原理,为什么用红黑树,红黑树的特点?8.快排时间空间复杂度,最好最坏的情况,优化方案?9.TCP的拥塞控制,具体过程是怎么样的?UDP有拥塞控制吗?如何解决?10.讲讲了解的垃圾回收算法和回收器,什么时候执行STOP THE WORLD?11.了解Go语言吗?1.Kylin的

m0_62051288的博客 137

三面头条,靠 P9 级算法大牛分享的两本算法 pdf 书籍,轻松拿到 offer

比如关于树的题型,链表的,数组等等,观察它们的解题思路,总结出解题套路。2.

m0_67698950的博客 312

Hadoop学习目录导航

  Hadoop学习第一课(虚拟机安装) Hadoop第二课(安装JDK) 学习Hadoop第三课(Hadoop安装与配置) Hadoop第四课(Hadoop初始化和测试) Hadoop学习第五课(配置ssh免密码登陆配置和ssh原理) Hadoop学习第六课(初识HDFS原理) Hadoop学习第七课(HDFS架构原理) Hadoop学习第八课(利用Java接口来操作Hadoop...

anaitudou的专栏 1023

三面头条,靠P9级算法分享的两本算法pdf书籍,轻松拿到offer

​编辑添加图片注释,不超过 140 字(可选)头条一面(Java+项目)1.倒排索引2.讲讲redis里面的哈希表?3.happen-before的规则?4.volatile修饰符,synchronize锁5.java单例模式的实现,懒汉、饿汉?6.进程与线程的区别,多进程和多线程的区别?7.HashMap原理,为什么用红黑树,红黑树的特点?8.快排时间空间复杂度,最好最坏的情况,优化方案?9.TCP的拥塞控制,具体过程是怎么样的?UDP有拥塞控制吗?如何解决?

m0_63437643的博客 146

大数据技术●降龙十八掌【目录】

降龙十八掌这门惊世武功在几百年前销声匿迹,时光如箭,岁月如梭,到了21世纪10年代又突然出现在某宝,这势必将引起武林中的又一轮血雨腥风。 有图为证: 《降龙十八掌》这次重出江湖将不同凡响,因为它这次用大数据技术进行了加持,并且是以“英格兰斯基”文字写的,老夫历经千难万苦得到了这部新版《降龙十八掌》,惊叹它的博大精深,老夫决定将它翻译过来,然后公布于众,原因是以史为鉴,它的每次重出江湖都将造...

鸣宇淳的专栏 3853
上一篇: 十一、理解MapReduce的二次排序功能,包括自定义数据类型、分区、分组、排序
下一篇: 十三、根据HDFS提供的API,实现文件上传、下载、删除、重命名、移动
zipo
博客等级 码龄23年 23粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值