Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
好的MapReduce示例_Mapreduce - Fatal编程技术网

好的MapReduce示例

好的MapReduce示例,mapreduce,Mapreduce,除了“如何使用MapReduce计算长文本中的单词”任务之外,我想不出任何好的例子。我发现这并不是给别人留下这个工具有多强大印象的最好例子 我不是在寻找代码片段,实际上只是“文本”示例。在MapReduce中可以执行的一组常见操作是一组常规SQL操作:选择、选择位置、分组方式等 另一个很好的例子是矩阵乘法,其中传递一行M和整个向量x,然后计算M*x的一个元素。Map reduce是一个开发用于高效处理大量数据的框架。 例如,如果一个数据集中有100万条记录,并且它存储在关系表示中,那么在这些数据

除了“如何使用MapReduce计算长文本中的单词”任务之外,我想不出任何好的例子。我发现这并不是给别人留下这个工具有多强大印象的最好例子


我不是在寻找代码片段,实际上只是“文本”示例。

在MapReduce中可以执行的一组常见操作是一组常规SQL操作:选择、选择位置、分组方式等


另一个很好的例子是矩阵乘法,其中传递一行M和整个向量x,然后计算M*x的一个元素。

Map reduce是一个开发用于高效处理大量数据的框架。 例如,如果一个数据集中有100万条记录,并且它存储在关系表示中,那么在这些数据集中派生值和执行任何类型的转换都是非常昂贵的

例如,在SQL中,给定出生日期,要找出一百万条记录中年龄大于30岁的人数需要一段时间,而这只会在查询复杂性增加时按magnitute的顺序增加。 Map Reduce提供了一种基于集群的实现,其中以分布式方式处理数据

这里有一篇维基百科文章解释了

另一个很好的例子是通过map reduce找到朋友,这是理解这个概念的一个很好的例子 使用良好的用例

就个人而言,我发现理解这个概念非常有用

复制博客中提供的解释(以防链接过时)

结交朋友 MapReduce最初是由Google开发的一个框架,它允许 便于跨多个域进行大规模分布式计算。 ApacheHadoop是一个开源实现

我会掩饰细节,但归根结底是定义两个 函数:一个map函数和一个reduce函数。map函数 获取一个值并输出键:值对。例如,如果我们定义 获取字符串并输出单词长度的映射函数 作为键,单词本身作为值,然后映射(steve)将 返回5:steve和map(savannah)将返回8:savannah。你可能有 注意,map函数是无状态的,只需要输入 值来计算它的输出值。这允许我们运行地图 函数与值并行,提供了巨大的优势。 在我们开始使用reduce函数之前,mapreduce框架组 所有值按键组合在一起,因此如果map函数输出 以下键:值对:

3 : the
3 : and
3 : you
4 : then
4 : what
4 : when
5 : steve
5 : where
8 : savannah
8 : research
它们被分组为:

3 : [the, and, you]
4 : [then, what, when]
5 : [steve, where]
8 : [savannah, research]
然后,这些行中的每一行都将作为参数传递给reduce 函数,它接受一个键和一个值列表。在这种情况下,, 我们可能想知道有多少特定长度的单词 存在,因此我们的reduce函数只计算 列表并输出具有列表大小的键,如:

3 : 3
4 : 3
5 : 2
8 : 2
削减也可以并行进行,再次提供了巨大的好处 优势。然后我们可以看看这些最终结果,并看到 在我们的语料库中只有两个长度为5的单词,等等

mapreduce最常见的示例是计算 词汇在语料库中出现的次数。假设你有一份互联网的副本 (我很幸运能在这种情况下工作),以及 你想要一份互联网上每个单词的列表,以及有多少个单词 发生的次数

您实现这一点的方法是将您创建的文档标记化 有(将其分解为单词),并将每个单词传递给映射器。地图绘制者 然后将单词连同值
1
一起吐出。这个 分组阶段将使用所有键(在本例中为单词),并进行分组 1的列表。然后,reduce阶段需要一个键(单词)和一个列表 (每次密钥出现在互联网上时的1列表),以及 在列表中求和。然后,减速机输出单词以及 计数当一切都说了又做了,你会有一个单子上的每一个字 互联网,以及它出现了多少次

简单,对吗?如果您曾经阅读过关于mapreduce的文章,那么上面的场景 没有什么新鲜事。。。这是mapreduce的“你好,世界”。这就是 一个真实世界的用例(Facebook可能会也可能不会真的这样做) 以下仅是一个示例):

Facebook有一个朋友列表(请注意,朋友是双向的) 如果我是你的朋友,你就是我的朋友)。他们也有 大量的磁盘空间,可满足数亿个请求 每天。他们决定在可能的时候预先计算计算 减少请求的处理时间。一个常见的处理请求 是“你和乔有230个共同的朋友”的特征。当你 访问某人的个人资料,您会看到您在中的好友列表 普通的。此列表不经常更改,因此删除此列表会浪费时间 每次访问配置文件时重新计算它(确保您可以使用 一个不错的缓存策略,但那样我就不能继续了 撰写关于mapreduce的文章(针对此问题)。我们将使用 mapreduce,这样我们可以每年计算一次每个人的普通朋友 对这些结果进行日处理并存储。稍后,它只是一个快速查找。我们已经 有很多磁盘,很便宜

假设朋友存储为Person->[朋友列表],我们的 朋友名单如下:

A -> B C D
B -> A C D E
C -> A B D E
D -> A B C E
E -> B C D
每一行都是映射器的参数。为世界上的每一位朋友 在好友列表中,映射器将输出一个键值对。钥匙会 与他人成为朋友。该值将是 朋友。钥匙会被分类,这样朋友们就会井然有序, 使所有成对的朋友转到同一个减速器。这很难 用文字来解释,让我们来看看你是否能看到 图案运行完所有映射程序后,您将得到一个列表 像这样:

For map(A -> B C D) :

(A B) -> B C D
(A C) -> B C D
(A D) -> B C D

For map(B -> A C D E) : (Note that A comes before B in the key)

(A B) -> A C D E
(B C) -> A C D E
(B D) -> A C D E
(B E) -> A C D E
For map(C -> A B D E) :

(A C) -> A B D E
(B C) -> A B D E
(C D) -> A B D E
(C E) -> A B D E
For map(D -> A B C E) :

(A D) -> A B C E
(B D) -> A B C E
(C D) -> A B C E
(D E) -> A B C E
And finally for map(E -> B C D):

(B E) -> B C D
(C E) -> B C D
(D E) -> B C D
Before we send these key-value pairs to the reducers, we group them by their keys and get:

(A B) -> (A C D E) (B C D)
(A C) -> (A B D E) (B C D)
(A D) -> (A B C E) (B C D)
(B C) -> (A B D E) (A C D E)
(B D) -> (A B C E) (A C D E)
(B E) -> (A C D E) (B C D)
(C D) -> (A B C E) (A B D E)
(C E) -> (A B D E) (B C D)
(D E) -> (A B C E) (B C D)
每一行将作为
(A B) -> (C D)
(A C) -> (B D)
(A D) -> (B C)
(B C) -> (A D E)
(B D) -> (A C E)
(B E) -> (C D)
(C D) -> (A B E)
(C E) -> (B D)
(D E) -> (B C)