MapReduce的
既需要输入地图功能,其接收数据块,并且输出中间结果,以及输入减少函数,其读取中间结果,并且产生最终结果。因此,这是正常的拆散的计算分成两个相关组件的地图和减少功能分别履行。例如,为了找到在数据集中的最大值,地图功能可以在输入数据的每个块的最大值,然后减少功能可以找到在所有的中间最大值的单个最大值。
本图显示了减少的阶段MapReduce的
算法。
的减少阶段MapReduce的
算法步骤如下:
的映射阶段的结果MapReduce的
算法是中间环节KeyValueStore
对象,其中包含由map函数添加的所有键-值对。在调用reduce函数之前,MapReduce的
组中间值KeyValueStore
通过独特的密钥对象。在中间的每个唯一关键KeyValueStore
对象将导致对reduce函数的单个调用。
对每个键,MapReduce的
创建一个ValueIterator
对象包含所有与该键关联的值。
属性中的值的reduce函数滚动ValueIterator
对象使用hasnext
和getnext
函数,通常在a中使用而
循环。
在执行汇总计算之后,reduce函数将一个或多个键值对添加到final中KeyValueStore
对象使用添加
和addmulti
功能。
的减少阶段MapReduce的
当reduce函数处理所有唯一的中间键及其相关值时,算法完成。这一阶段的结果MapReduce的
算法(类似于地图相)是KeyValueStore
对象,其中包含reduce函数添加的所有最终键值对。在减少阶段之后,MapReduce的
拉动从键值对KeyValueStore
并在数据存储中返回它们KeyValueDatastore
默认对象)。在输出中的键值对数据存储不按排序顺序;它们出现在相同的顺序,他们被减少的功能添加。
MapReduce的
为中间的每个唯一键自动调用reduce函数KeyValueStore
对象,因此reduce函数必须满足某些基本要求,才能在这些自动调用期间正常运行。这些需求共同确保数据在MapReduce的
算法。
到减少函数的输入是intermKey
,intermValIter
和outKVStore
:
intermKey
是映射函数添加的唯一键之一。每个对reduce函数的调用通过MapReduce的
从中间的键中指定一个新的唯一键KeyValueStore
对象。
intermValIter
是个ValueIterator
与活动键关联的对象,intermKey
。这个ValueIterator
对象包含与活动键关联的所有值。方法滚动这些值hasnext
和getnext
功能。
outKVStore
是最终的名称KeyValueStore
对象到的减少功能的需求增加键 - 值对。该添加
和addmulti
函数使用此对象名称向输出添加键-值对。MapReduce的
取从输出键值对outKVStore
并返回它们在输出数据存储区,这是一个KeyValueDatastore
默认对象。如果reduce函数没有添加任何键-值对outKVStore
,然后MapReduce的
返回一个空的数据存储。
除了reduce函数的这些基本要求之外,reduce函数添加的键值对还必须满足以下条件:
键必须是数字标量、字符向量或字符串。数字键不能南
逻辑的、复杂的或稀疏的。
通过减少功能添加的所有键必须具有相同的类,但这个类可以从类的地图功能增加了按键的不同。
如果输出类型
的说法MapReduce的
是“二元”
(默认值),然后通过降低功能添加了一个值可以是任何MATLAB®对象,包括所有有效的MATLAB数据类型。
如果输出类型
的说法MapReduce的
是'TabularText'
,然后通过降低功能添加的值可以是一个数字标量,矢量字符或字符串。在这种情况下,该值不能南
复杂的、逻辑的或稀疏的。
使用的其他产品有当上述的键 - 值对要求可能不同s manbetx 845MapReduce的
。请参阅文件,将正确的产品来获得特定产品的键值对的要求。
这里有几个说明性减少使用的功能MapReduce的
例子。
一个减速的最简单的例子是maxArrivalDelayReducer
,即本例中的减速机使用MapReduce查找最大值。本例中的map函数查找每个输入数据块中的最大到达延迟。然后reduce函数通过在所有中间最大值中找到一个最大值来完成任务。属性中的值通过滚动程序查找最大值ValueIterator
对象和每一个值进行比较,当前最大。MapReduce的
只要求这种减速功能的一次,因为映射器将单个唯一键的中间KeyValueStore
对象。reduce函数将单个键-值对添加到输出。
功能maxArrivalDelayReducer (intermKey intermValIter outKVStore)%intermKey是 'PartialMaxArrivalDelay'。intermValIter是一个迭代%具有关键“PartialMaxArrivalDelay”的所有值。maxVal =无穷;而max(getnext(intermValIter), maxVal);结束%添加到outKVStore的键值对将成为mapreduce的输出添加(outKVStore“MaxArrivalDelay”,maxVal);结束
减速器的一个更高级的实施例是statsByGroupReducer
,即本例中的减速机计算汇总统计数据由集团使用的MapReduce。在这个例子中组的映射函数,然后使用一个额外的参数(航空公司载体,月,等等)中的每个输入的数据,并计算各组数据的若干统计量。精简函数通过检索统计量,并将它们串联成长向量,然后使用向量来计算最终的统计量进行计数,均值,方差,偏度和峰度完成的任务。减速机存储这些值在结构领域,使每一个独特的密钥具有统计量的输出的结构。
功能statsByGroupReducer(intermKey,intermValIter,outKVStore)%减速功能的StatisticsByGroupMapReduceExample。%版权所有2014年MathWorks公司N = [];米= [];V = [];S = [];K = [];%获取所有中间统计信息集而getnext(intermValIter);n = [n;值(1)];m = [m;值(2)];v = [v;值(3)];s =[年代;值(4)];k = [k; value(5)];结束%注意,这种方法假定串联的中间值拟合%在内存中。的减速器函数,即协变减径器%CovarianceMapReduceExample一种替代成对还原方法合并中间结果数= (n)之和;meanVal = (n。*米)/数总和;d = m - meanVal;方差= (sum(n.*v) + sum(n.*d.²))/计数;skewnessVal = (n.*s)和(n.*d)* (3 * v + d。^ 2)))。/方差(计数* ^ (1.5));(n.*k) + (n.*d)* (4 * s + 6。* v。* d + d。^ 3))) /(方差数* ^ 2);有价值=结构(“数”数,'意思',meanVal,“方差”方差,…“偏态”,skewnessVal,“峰度”,kurtosisVal);将结果添加到输出数据存储中添加(outKVStore intermKey、有价值);
有关常见的编程模式在地图以上信息减少功能,请参阅建立有效的算法与MapReduce的。
添加
|addmulti
|getnext
|hasnext
|MapReduce的
|tabularTextDatastore