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又要先放一边,导师的实验也是,接下来主要争取去学校之前做完第二次作业。稍微看了下作业,感觉下学期软工实践会比想象中更花时间(毕竟渣渣),估计平常晚自习的时间都得给它,其它课程得争取白天没课的碎片时间和睡前的一段时间解决,还有刷书打代码大概得安排在两次作业间隙来做。一直说会见到凌晨三四点的福大,希望只是偶尔和队友们一起体验一下,其他时候合理安排时间也可以完成任务,因为就我个人来说,熬夜时的脑子并不好用。以上。

参考资料:

Chapter 5 Order Inversion Pattern的更多相关文章

  1. 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 ...

  2. (转)MapReduce Design Patterns(chapter 4 (part 2))(八)

    Binning Pattern Description 分箱模式,跟前面的类似,分类记录且不考虑记录的顺序. Intent 归档数据集中的每条记录到一个或多个类别. Motivation 分箱和分区很 ...

  3. A brief CRC tutorial

    https://www.kernel.org/doc/Documentation/crc32.txt A brief CRC tutorial. A CRC is a long-division re ...

  4. 【ASP.NET Identity系列教程(二)】运用ASP.NET Identity

    注:本文是[ASP.NET Identity系列教程]的第二篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...

  5. ASP.NET Identity 二 (转载)

    来源:http://www.cnblogs.com/r01cn/p/5180892.html#undefined 推荐看原文,这里转载是怕好文章消失了. 注:本文是[ASP.NET Identity系 ...

  6. 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 ...

  7. Texture tiling and swizzling

    Texture tiling and swizzling 原帖地址:http://fgiesen.wordpress.com If you’re working with images in your ...

  8. php ajax 同时验证 用户名 密码

    今天写了一个程序分享给大家,该程序是ajax密码和用户名验证问题 第一步 先在数据库里建立一张表 有3个字段 为 id name pass 第二步 写html页面,需要引入jq库 请到官网自行下载 & ...

  9. js文件中使用EL表达式的问题

    var str = '${str}' ; var str = '${obj.属性名}'; 只可以再jsp页面的<script></script>中使用,外部引入的js文件中不能 ...

随机推荐

  1. ASP.NET Core 的启动和运行机制

    目录 ASP .NET Core 的运行机制 ASP .NET Core 的启动 ASP .NET Core 的管道和中间件 参考 ASP .NET Core 的运行机制 Web Server: AS ...

  2. Flex4 初始化过慢解决方法

    昨天找了个免费.net空间,想测试一下做的一个简单Flex4 上传项目的效果.上传所有文件到网站之后,访问项目页面,进度条一点一点艰难的向前移动,到了100%后却不出现程序界面,等待一会儿还是没有出现 ...

  3. 阿里云 ECS服务器安装流程

    1. 挂载硬盘 2. 上传文件 3 .vncserver unset DISPLAY who -u export DISPLAY= xhost + 4. java /etc/profile expor ...

  4. MVC缓存(一)

    //OutputCache是设置缓存,参数Duration设置缓存的过期时间,OutputCache可以加到Controller上,也可以加到Action上,但是当Controller与Action都 ...

  5. 七、spark核心数据集RDD

    简介 spark RDD操作具体参考官网:http://spark.apache.org/docs/latest/rdd-programming-guide.html#overview RDD全称叫做 ...

  6. SpringBoot管理Banner

    一.引言 在springboot项目启动的时候,会在console控制台中打印出一个SPRING的图案.有时候为了减少日志输出以及控制台的输出,就需要将这些给去除:有时候需要换上个人的标签等标识,就需 ...

  7. .NET Core是什么

    对于开发人员,把C#语言和.NET描述为最重要的新技术一点都不夸张.NET提供了一种环境.在这种环境中,可以开发在Windows上运行的几乎所有应用程序.如:编写Web页面.WPF应用程序.REST ...

  8. javascript函数中with的介绍

    /*js函数中with函数的用法分析定义 方便用来引用某个对象中已有的属性但是不能用来给对象添加属性 要给对象创建新的属性 必须明确的引用该对象*/代码格式with(object) statement ...

  9. ionic--配置路由

    1.ng-route index中引用文件: <script src="ionic.bundle.js"></script> <script src= ...

  10. 用一个div模拟textarea并实现高度自适应

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...