一、问题背景

  倒排索引其实就是出现次数越多,那么权重越大,不过我国有凤巢....zf为啥不管,总局回应推广是不是广告有争议...

  eclipse里ctrl+t找接口或者抽象类的实现类,看看都有啥方法,有时候hadoop的抽象类返回的接口没有需要的方法,那么我们返回他的实现类。

  吧需要的文件放入hdfs下的目录下,只要不是以下划线开头的均算。

二、理论准备

  搜索引擎查询的时候就是查询这个单词文档矩阵,旺旺采用倒排索引存储,后缀树也可以。

  不管理论直接看例子,这是原始的文档

  下面是简单的索引,只是表征是否在文档中出现过。

  下面就是文档及出现次数。

  擦,咋有点想协同过滤。

三、思路分析

  其实是一个全文检索的数据结构。理论上关键字出现次数越多,那么文章就越靠前。

  就是wc的加强版本。wc是统计单词在文章里出现的次数,倒排是统计关键字在各个文章出现的次数。

  有时候不能一下子写出来,可能需要多次mr,那么我们首先确定最终的结果形式,然后向上反推。

  如果多个mr,考虑使用combiner,不过要考虑combiner是不是可插拔的,也就是combiner和业务逻辑是否和reducer一样。

  怎么知道单词出现在那个文章里?从context对象里获取。既然能忘context写东西,那么也能从其中获取信息。

  最终结果是

hello  "a.txt->5 b.txt->3"
tom     "a.txt->2 b.txt->1"
kitty   "a.txt->1"

  那么reduce的输出

context.write("hello","a.txt->5 b.txt->3");

  那么combiner阶段是

<"hello",{"a.txt->5","b.txt->3"}>

  那么map的输出

context.write("hello","a.txt->5");
context.write("hello","b.txt->3");

  不过考虑到wc,map的输出应该是,路径放在value不好处理,还要廉价呢。

context.write("hello->a.txt",1);
context.write("hello->a.txt",1);
context.write("hello->a.txt",1);
context.write("hello->a.txt",1);
context.write("hello->a.txt",1);context.write("hello->b.txt",1);
context.write("hello->b.txt",1);
context.write("hello->b.txt",1);

  那么combiner阶段根据就输出

<"hello->a.txt",1>
<"hello->a.txt",1>
<"hello->a.txt",1>
<"hello->a.txt",1>
<"hello->a.txt",1><"hello->b.txt",1>
<"hello->b.txt",1>
<"hello->b.txt",1>context.write("hello","a.txt->5");
context.write("hello","b.txt->3");

 次是不同文件的相同key并没有合并,reducer合并输出皆可。

四、代码实现

4.1 Mapper

public class IIMapper1 extends Mapper<LongWritable, Text, Text, Text> {private Text k = new Text();//下面其实是int,不过也可以在接收端Integer.parseInt转了就好private Text v = new Text();public void map(LongWritable key, Text value, Context context)throws IOException, InterruptedException {String line = value.toString();String[] words = line.split(" ");//从context对象里找到单词属于那个文章//context.getInputSplit();找到切片 按ctrl找 发现返回时InputSplit//不过是个抽象类 ctrl + t找他的实现类//能把数据写入context,繁殖也能从context拿到很多信息//从下面inputSplit调用get的时候发现没有合适的方法,那么我们找他的实现类,调用实现类的方法//InputSplit inputSplit = context.getInputSplit();//inputSplit.get//他的子类很多    我们处理文件就用File开头的  然后有个getPathFileSplit inputSplit = (FileSplit)context.getInputSplit();//文件名是hdfs://hostname:port/a/1.txt//我们戒掉hdfs://hostname:port  不能戒掉a  应为这是文件夹否则不知道1.txt来自哪 其他文件家下可能也有同名文件//也可以不接去String path = inputSplit.getPath().toString();for(String w:words) {k.set(w+"->"+path);v.set("1");context.write(k, v);}}}

  

4.2 Combiner

String[] wordAndPath = key.toString().split("->");String word = wordAndPath[0];String path = wordAndPath[1];// process valuesint sum = 0;for (Text val : value) {sum += Integer.parseInt(val.toString());}k.set(word);v.set(path+"->"+sum);context.write(k, v);

  

4.3 Reducer

//不涉及多线程 用StringBuilde即可StringBuilder sb = new StringBuilder();// process valuesfor (Text val : value) {sb.append(val.toString()).append("\t");}context.write(key, new Text(sb.toString()));

  

四、实验分析

MapReduce实现倒排索引(类似协同过滤)相关推荐

  1. 基于物品的协同过滤ItemCF的mapreduce实现

    文章的UML图比较好看..... 原文链接:www.cnblogs.com/anny-1980/articles/3519555.html 基于物品的协同过滤ItemCF 数据集字段: 1.  Use ...

  2. 协同过滤算法 R/mapreduce/spark mllib多语言实现

    用户电影评分数据集下载 http://grouplens.org/datasets/movielens/ 1) Item-Based,非个性化的,每个人看到的都一样 2) User-Based,个性化 ...

  3. 从原理到实现,详解基于朴素ML思想的协同过滤推荐算法

    作者丨gongyouliu 编辑丨Zandy 来源 | 大数据与人工智能(ID: ai-big-data) 作者在<协同过滤推荐算法>.<矩阵分解推荐算法>这两篇文章中介绍了几 ...

  4. 推荐系统组队学习——协同过滤

    文章目录 一.协同过滤介绍 二.相似度度量方法 1. 杰卡德(Jaccard)相似系数 2. 余弦相似度 3. 皮尔逊相关系数 三.基于用户的协同过滤 原理 编程实现 UserCF优缺点 四.基于物品 ...

  5. Java游戏碟中谍_MapRedcue的demo(协同过滤)

    MapRedcue的演示(协同过滤) 做一个关于电影推荐.你于你好友之间的浏览电影以及电影评分的推荐的协同过滤. 百度百科: 协同过滤简单来说是利用某兴趣相投.拥有共同经验之群体的喜好来推荐用户感兴趣 ...

  6. 推荐引擎算法学习导论:协同过滤、聚类、分类(2011年旧文)

    推荐引擎算法学习导论:协同过滤.聚类.分类 作者:July 出处:结构之法算法之道 引言 昨日看到几个关键词:语义分析,协同过滤,智能推荐,想着想着便兴奋了.于是昨天下午开始到今天凌晨3点,便研究了一 ...

  7. 推荐系统2——协同过滤CF

    在之前我也看了很多人写的推荐系统的博客,理论的.算法的都有,多是个人的理解和感悟,虽然很深刻,但是对于自己而言还是不成系统,于是我参考大牛项亮编著的<推荐系统实践>将该领域知识系统整理一遍 ...

  8. 从原理到落地,七大维度读懂协同过滤推荐算法

    作者丨gongyouliu 来源 | 大数据与人工智能 导语:本文会从协同过滤思想简介.协同过滤算法原理介绍.离线协同过滤算法的工程实现.近实时协同过滤算法的工程实现.协同过滤算法应用场景.协同过滤算 ...

  9. 推荐算法——基于协同过滤CF

    https://www.toutiao.com/a6643326861214482957/ 2019-01-06 18:21:09 前边我们已经介绍了推荐算法里的基于内容的推荐算法CB,今天我们来介绍 ...

最新文章

  1. Camera360与全球1.8亿用户共同创造更美的照片
  2. JavaFX 2 GameTutorial第5部分
  3. 七、CSS 三大特性(完整详细解析)
  4. 挑战记忆力-Web前端实现记忆纸牌游戏(JS+CSS)
  5. 保护我方小学生!腾讯游戏全面启用防沉迷规则,每月充值金额有上限
  6. 单点登录原理与简单实现【转载】
  7. 一组飒气十足的商务海报PSD分层海报
  8. C语言实现可变参数列表的system接口:宏__VA_ARGS__
  9. Maven学习总结(28)——Maven+Nexus+Myeclipse集成
  10. GitHub 的简单使用
  11. 训练中Loss为Nan的原因,梯度消失或者爆炸的优化
  12. (转)一张图学会Dockerfile
  13. 开发APP软件需要哪些编程语言和开发环境
  14. 基于matlab的64QAM通信系统的仿真
  15. linux安装五笔输入法centos,CentOS 7系统怎么安装极点五笔输入法?
  16. 飞信2008协议抓包(2)
  17. arcgis server发布自定义打印模板及利用ArcGIS API javascript使用自定义打印服务打印地图
  18. st58服务器装系统,微pe硬盘安装系统教程
  19. ServiceNow获得FedRAMP高基准授权
  20. web服务器是什么?web服务器有哪些

热门文章

  1. mysql存储过程表_mysql 存储过程,表
  2. mysql date week_mysql weekday(date)/subdate(date,间隔天数)查询年龄/本月/周过生日
  3. 数学建模题目及论文_三道适合作为试题的数学建模题目及其评分标准
  4. showdoc windows 搭建_Windows 搭建在线文档工具showdoc工具
  5. autocad不能画图_设计院老司机谈CAD:学习AutoCAD掌握方法技巧更重要
  6. matlab 二重积分
  7. Markdown 编辑器的使用记录 (Typora)
  8. 【 FPGA 】跨时钟域处理以及边沿检测
  9. Spartan-6的MCB模块、GTP模块、PCIe端点模块
  10. Spartan-6的SelectIO资源