mapreduce
需要一个接收数据块并输出中间结果的输入映射函数和一个读取中间结果并产生最终结果的输入reduce函数。因此,对于map和reduce函数来说,将计算分解为两个相关的部分是正常的。例如,要在一个数据集中找到最大值,map函数可以在输入数据的每个块中找到最大值,然后reduce函数可以在所有中间最大值中找到单个最大值。
这个图显示了Reduce阶段的mapreduce
算法。
减少阶段的mapreduce
算法有以下步骤:
的Map阶段的结果mapreduce
算法是中间体keyvaluestore.
包含地图函数添加的所有键值对的对象。在调用Refey函数之前,mapreduce
对中间值进行分组keyvaluestore.
对象的唯一键。中间的每个键都是唯一的keyvaluestore.
对象导致对缩小功能的单个呼叫。
对于每一个关键,mapreduce
创造一个ValueIterator
对象,该对象包含与该键关联的所有值。
Repend函数滚动到来自的值ValueIterator
对象使用hasnext
和GetNext.
通常在a中使用的功能而
环形。
执行摘要计算后,减少函数将一个或多个键值对添加到最终位置keyvaluestore.
对象使用添加
和addmulti
功能。
减少阶段的mapreduce
当缩小功能处理所有唯一中间键及其关联值时,算法已完成。这个阶段的结果mapreduce
算法(类似于Map阶段)是keyvaluestore.
包含通过减小函数添加的所有最终键值对的对象。减少阶段后,mapreduce
从keyvaluestore.
并将它们返回在数据存储(aKeyValueDatastore
对象默认情况下)。输出数据存储中的键值对没有按顺序排序;它们出现的顺序与reduce函数添加的顺序相同。
mapreduce
为中间的每个唯一键自动调用缩小功能keyvaluestore.
对象,因此减少函数必须符合某些基本要求在这些自动呼叫期间正常运行。这些要求共同确保数据通过降低阶段进行适当的数据mapreduce
算法。
reduce函数的输入是intermkey.
那intermValIter
,outkvstore.
:
intermkey.
是地图功能添加的唯一键之一。每个呼叫减少功能mapreduce
指定中间键的新唯一键keyvaluestore.
目的。
intermValIter
是ValueIterator
与活动密钥关联的对象,intermkey.
.这ValueIterator
对象包含与活动密钥关联的所有值。使用使用的值滚动值hasnext
和GetNext.
功能。
outkvstore.
决赛的名字是什么keyvaluestore.
对象,reduce函数需要向其添加键值对。的添加
和addmulti
函数使用此对象名称将键值对添加到输出。mapreduce
获取的输出键值对outkvstore.
并在输出数据存储中返回它们KeyValueDatastore
默认情况下对象。如果缩小功能不添加任何键值对outkvstore.
, 然后mapreduce
返回一个空的数据存储。
除了降低函数的这些基本要求外,减少功能添加的键值对还必须满足这些条件:
键必须是数字标量,字符向量或字符串。数字键不能南
,逻辑,复杂或稀疏。
reduce函数添加的所有键必须具有相同的类,但该类可能与map函数添加的键的类不同。
如果OutputType
的观点mapreduce
是'二进制'
(默认值),则reduce函数所增加的值可以是任何MATLAB®对象,包括所有有效的MATLAB数据类型。
如果OutputType
的观点mapreduce
是“TabularText”
,则由reduce函数添加的值可以是数字标量、字符向量或字符串。在这种情况下,该值不能为南
,复杂,逻辑或稀疏。
笔记
使用其他产品时,上述键值对要求可能会有所不同下载188bet金宝搏mapreduce
.请参阅有关适当产品的文档,以获得特定于产品的键值对需求。
中使用的一些说明性reduce函数mapreduce
的例子。
减速器的一个最简单的例子是MaxArrivalDelayreducer.
,这是该示例的减速器使用MapReduce查找最大值.此示例中的MAP函数在输入数据的每个块中找到最大到达延迟。然后,通过在所有中间最大值中找到单个最大值,减少函数完成任务。要找到最大值,还原器滚动到值中的值ValueIterator
对象,并将每个值与当前最大值进行比较。mapreduce
只调用这个reducer函数一次,因为映射器向中间添加了一个唯一的键keyvaluestore.
目的。Repend函数为输出添加单个键值对。
函数MaxArrivalDelayRreducer(Intermkey,Intermvaliter,Outkvstore)% intermKey是“PartialMaxArrivalDelay”。intermValIter是的迭代器%所有具有“PartialMaxArrivalDelay”键的值。maxval = -inf;而hasnext(Intermvaliter)maxval = max(getnext(Intermvaliriter),maxval);结尾%键值对添加到outkvstore将成为mapReduce的输出添加(outkvstore,'maxarrivaldelay',maxval);结尾
减速器的一个更高级的例子是attsbygroupreducer.
,这是该示例的减速器使用MapReduce按组计算汇总统计.本例中的map函数使用一个额外参数(航空公司、月份等)对每个输入中的数据进行分组,然后为每组数据计算几个统计量。reduce函数通过检索统计量并将其连接成长向量来完成任务,然后使用这些向量来计算最终的统计量,包括计数、平均值、方差、偏度和峰度。减速器将这些值存储为结构中的字段,以便每个惟一的键在输出中具有统计数量的结构。
函数statsByGroupReducer (intermKey intermValIter outKVStore)% Reducer函数的StatisticsByGroupMapReduceExample。版权所有The MathWorks, Inc.n = [];m = [];v = [];s = [];k = [];%获得所有中级统计数据而hasnext(Intermvaliter)value = getNext(Intermvalirt);n = [n;价值(1)];m = [m;价值(2)];v = [v;价值(3)];s = [s;价值(4)];k = [k; value(5)];结尾请注意,此方法假定连接的中间值是合适的% 在记忆中。请参阅Reducer功能,Coviareducer% CovarianceMapReduceExample用于替代的两两减少方法%结合中间结果count = sum(n);意思=总和(n。* m)/ count;d = m - 意味着;方差=(总和(n。* v)+ sum(n。* d。^ 2))/计数;skewnessval =(总和(n。* s)+ sum(n。* d。*(3 * v + d. ^ 2)))。(count * veriance ^(1.5));kurtosisval =(总和(n。* k)+ sum(n。* d。*(4 * s + 6. * v。* d + d。^ 3)))./(count * veriance ^ 2);Outvalue = struct('数数',数数,“的意思是”meanVal,'方差',方差,......“偏斜”skewnessVal,'kurtosis', kurtosisVal);%添加结果到输出数据存储添加(Outkvstore,Intermkey,Outvalue);
有关map或reduce函数中常见编程模式的更多信息,请参见用MapReduce构建有效的算法.
mapreduce
|tabularTextDatastore
|添加
|addmulti
|hasnext
|GetNext.