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文件中不能 ...
随机推荐
- dll ocx cab IE 自动安装
我们打开淘宝等网站时,IE浏览器会提示安装空间,这个控件便是用于对用户名密码进行加密的ActiveX控件.如何在我们的站点上安装如此控件,让用户可以通过简单的点击便可方便使用我们的空间呢? 下面是如何 ...
- imx6 Android6.0.1 init.rc解析
1. 概述 1.1 概述 之前分析过android5的init.rc,不过还是不够仔细,现在来看看android6的,多的就不写了,只写关键点 忘记一些基本概念可以先看看之前的笔记: Android5 ...
- [转]MongoDB 概念解析
本文转自:http://www.runoob.com/mongodb/mongodb-databases-documents-collections.html 不管我们学习什么数据库都应该学习其中的基 ...
- “System.OutOfMemoryException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理
“System.OutOfMemoryException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理 这个原因肯定不是因为程序内部的逻辑错误,或者别的什么情况. 想想,肯 ...
- VS中自定义C#快速简写代码
首先在VS中找到工具——代码片段管理器——语言选择(CSharp)——Visual C#——赋值路径——根据路径找到对应的代码片段用VS打开 修改: Title——标题 ShortCut——缩写 D ...
- Cookie,Sesstion,Application 缓存。
Cookie客户端缓存. 1.引言 随着浏览器的处理能力不断增强,越来越多的网站开始考虑将数据存储在「客户端」,那么久不得不谈本地存储了. 本地存储的好处: 一是避免取回数据前页面一片空白,如果不需要 ...
- Java学习--使用 Math 类操作数据
使用 Math 类操作数据 Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: M ...
- Java基础教程(7)--运算符
现在,我们已经学会了如何声明和初始化变量,但你可能想知道如何操作它们.运算符是对一个,两个或三个操作数执行特定操作并返回结果的特殊符号.下表列出了Java中的运算符: 表格中的运算符是按照从上 ...
- sprintf 格式化字符串
好久没写博客了,又遇到自己觉得很傻的问题,格式化字符串还要找下 定义和用法 sprintf() 函数把格式化的字符串写入变量中. arg1.arg2.++ 参数将被插入到主字符串中的百分号(%)符号处 ...
- 03-Tomcat服务器
一.Java分类 JavaSE Java的标准版,一般用来开发桌面应用程序, 但是在开发桌面应用程序上相对VB,Delphi,VC++并没有什么优势. JavaEE 也就是Java Enterpris ...