Chapter 5 Order Inversion Pattern
5.1 Introdution
The main focus of this chapter is to discuss the order inversion (OI) pattern, which can be used in solving some problems using MapReduce framework. The OI pattern enables us to control the order of values received at a reducer (some computations require ordered data).
这章主要讨论反转排序(OI)模式,可以用于某些使用MapReduce框架解决的问题。OI 模式允许我们控制送到reducer的值的顺序,某些计算需要数据是有序的。在Hadoop中,送到reducer的数据是没限定的(我怎么记得会按键排序来着),OI模式使用更简单的数据结构,占用更少的reducer内存(因为在reducer阶段没有额外的排序)。
看到这里我在想,反转排序的前提不就是有序吗,像是升序反转成降序,不然反转之后不也是无序的。那么,如果后续计算需要数据降序,直接降序送到reducer不就可以,为什么要使用OI模式。书上接下来倒是很贴心地举例来进一步理解OI模式,不过例子也是不明所以(看了几遍选择放弃),并没有回答我的疑问。还说实现关键是定义用户分割器(custom partitioner),用户分割器只关注复合键里的原始键,都是什么鬼。稍微看了一下接下来的内容,大概知道例子在干啥,可是仍然看不出来和“反序”有什么关系。于是去找了一些资料,发现并不是按字面理解的“反序”:
翻译完本文之后,我深深地感觉到,将Order Inversion翻译成反序模式是不恰当的,根据本文的内容,很显然,Inversion并非是将顺序倒排的意思,而是如同Spring的IOC一样,表明的是一种控制权的反转。Spring将对象的实例化责任从业务代码反转给了框架,而在本文的模式中,在mapreduce的sorting过程中,原来由框架负责的数据的排序以及shuffle规则被用户定制化了,控制权从框架反转到了user,实际上这种模式就是由用户控制sorting过程的意思。
----引用自MapReduce 算法 - 反序模式 (Order Inversion)译者评论。
5.2 Example if Order Inversion Pattern
The simple example to demonstrate the OI pattern is to compute relative frequecies of words for a given set of documents. The goal is to build a N × N matrix (call this matrix M), where N = |V| (the vocabulary size all given documents) and each cell Mij contains the number of times word Wi co-occurs with word Wj within a specific context.
例子是计算N*N共现(co-occurs)矩阵的问题,N是所给输入的词汇数量,元素Mij表示单词Wi和Wj在给定上下文范围内(比如这个单词前后两个单词的范围)共同出现的总次数。不过,这个矩阵有一个缺陷,某个Mij的值很大,可能只是单词Mi或Mj在输入里出现的次数比较高,不能说明这两个单词有一定联系。所以,改进的共现矩阵不是计算绝对频数,而是相对频率,Mij表示的是单词Mj在Mi给定上下文范围内出现的概率。
5.3 MapReduce for Order Inversion Pattern
Following our example of computing relative frequencies for a given set of documents, we do need to generate two sequence of data: the first sequence will be total neighborhood counts (the total number of co-ocurrences of a word) for the word (let‘s denote this by composite Key =(W, ∗)— W denotes the word) and the second sequence will be the counts of that word against other specific words (let‘s denote this by composite Key = (W, W2)).
为了计算相对频率,我们需要两个序列,分别记为(w, *)和(w, wi)。举个例子来说,输入是“w1w2w3”,给定范围是前后两个单词,则对单词w1来说,序列是((w1, *), 2),((w1, w2), 1),((w1, w3), 1),表示w1的共现对数及共现的单词和次数,计算相对频率就很容易了。mapper需要输出上述的序列,为了使同一个单词的序列输到同一个reducer,还要自定义用户分割器,只关注复合键里面的w部分。照旧贴上代码如下。
5.3.1 Custom Partitioner
5.3.1.1 Custom Partitioner Implementation in Hadoop
把同一个单词的序列送到同一个reducer。
5.3.2 Relative Frequency Mapper
mapper要输出上述序列。
5.3.3 Relative Frequency Reducer
5.3.4 Implementation Classes in Hadoop
跳过“5.4 Sample Run”。
导师布置的看书任务总算是告一段落,最后再来总结一下。第五章内容不多,意外地花了很多时间,最后也是大概知道在说啥的程度。主要就讲了共现矩阵的例子,计算相对频数,具体实现代码不抠。主要是软工实践第二次作业刚发出来了,栋哥说开学第一周会让我们体会到2y2s,以为第二次还有一周(真是2y2s),那还没入门的Python又要先放一边,导师的实验也是,接下来主要争取去学校之前做完第二次作业。稍微看了下作业,感觉下学期软工实践会比想象中更花时间(毕竟渣渣),估计平常晚自习的时间都得给它,其它课程得争取白天没课的碎片时间和睡前的一段时间解决,还有刷书打代码大概得安排在两次作业间隙来做。一直说会见到凌晨三四点的福大,希望只是偶尔和队友们一起体验一下,其他时候合理安排时间也可以完成任务,因为就我个人来说,熬夜时的脑子并不好用。以上。
参考资料:
- MapReduce 算法 - 反序模式 (Order Inversion)
- 《Data-intensive Text Processing with MapReduce》读书笔记第3章:MapReduce算法设计(3)
Chapter 5 Order Inversion Pattern的更多相关文章
- JavaScript- The Good Parts Chapter 4
Why, every fault’s condemn’d ere it be done:Mine were the very cipher of a function. . .—William Sha ...
- (转)MapReduce Design Patterns(chapter 4 (part 2))(八)
Binning Pattern Description 分箱模式,跟前面的类似,分类记录且不考虑记录的顺序. Intent 归档数据集中的每条记录到一个或多个类别. Motivation 分箱和分区很 ...
- A brief CRC tutorial
https://www.kernel.org/doc/Documentation/crc32.txt A brief CRC tutorial. A CRC is a long-division re ...
- 【ASP.NET Identity系列教程(二)】运用ASP.NET Identity
注:本文是[ASP.NET Identity系列教程]的第二篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...
- ASP.NET Identity 二 (转载)
来源:http://www.cnblogs.com/r01cn/p/5180892.html#undefined 推荐看原文,这里转载是怕好文章消失了. 注:本文是[ASP.NET Identity系 ...
- ASP.NET Identity系列教程-3【运用ASP.NET Identity】
https://www.cnblogs.com/r01cn/p/5180892.html 14 运用ASP.NET Identity In this chapter, I show you how t ...
- Texture tiling and swizzling
Texture tiling and swizzling 原帖地址:http://fgiesen.wordpress.com If you’re working with images in your ...
- php ajax 同时验证 用户名 密码
今天写了一个程序分享给大家,该程序是ajax密码和用户名验证问题 第一步 先在数据库里建立一张表 有3个字段 为 id name pass 第二步 写html页面,需要引入jq库 请到官网自行下载 & ...
- js文件中使用EL表达式的问题
var str = '${str}' ; var str = '${obj.属性名}'; 只可以再jsp页面的<script></script>中使用,外部引入的js文件中不能 ...
随机推荐
- latex排版(CTeX winEdit输出“系统找不到指定的文件”的终极解决办法)
WinEdit的菜单栏中:Options->Execution Modes 弹出的界面见下面的图: 看上图中“1”所示位置,后面3项出现了“?”号(出现“系统找不到指定的文件”的错误时,所有项后 ...
- 64位使用windbg获取Shadow SSDT
首先选择一个带界面的程序explorer.exe进行附加 kd> !process explorer.exe PROCESS ffff86893dd075c0 SessionId: Cid: 0 ...
- JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- ES6常用七大特性
ES6可谓是对JS语言的一个颠覆性改变,增加了Module改善JS一直被诟病的模块化.Promise解决异步函数的回调地狱.Class的面相对象编程... 在学习ES6的过程中,大家或多或少都有看过阮 ...
- SimpleCalendar日历插件改版
先附上一张货真价实的效果图: 以上部分代码,为了适应我司项目的需求,原来插件源码大改(因为项目中下拉框用了select2,所以原来插件的下拉框就有问题了,在加上原来插件本身就有点问题,特别是农历 .节 ...
- jquery中 dom对象与jQuery对象相互转换
var jq = $(dom对象);//额 再补充点吧好记. $是jquery的别名.这一句等价于 var jq = jQuery(dom对象); 反之. dom对象 = jq[0]; //不写那么长 ...
- ashx 绝对路径得到物理路径
//先得到模板页所在的路径 string phyPath = context.Server.MapPath("/p02style.html"); //得到模板的所有内容 strin ...
- ASP.NET 解决在点击Button执行服务器事件之前验证用户输入并阻塞
在网站项目开发时,为了减少用户的错误性的操作,很多时候我们都需要做一些必要的JS验证来提醒用户,比如:“输入的值不符合规则,请重新输入”.“提交后无法修改,您确定要继续吗?”友好性的提示. 这时候我们 ...
- MySQL数据源驱动报错
报错信息:MySQL数据源驱动报错: 1.mysql8.0以上版本需要连接数据库的JDBC驱动也是8.0版本以上 com.mysql.cj.jdbc.Driver 2.MySQL高版本需要指明是否需要 ...
- Android Studio下载/更新SDK
今天安装配置Android Studio的时候,用SDK Manager下载SDK的时候只显示了一个7.0,别的都刷新不出来(被墙了).去网上搜索怎么解决,发现很多帖子的方法已经过时了(跟现在的AS版 ...





