主要内容

编写一个减少函数

Reduce函数在MapReduce的角色

mapreduce需要一个输入映射函数,接收的数据块和中间结果输出,和一个输入减少函数读取中间结果并生成一个最终结果。因此,它是正常的计算分解成两个相关的部分单独的map和reduce函数来实现。例如,找到一组数据的最大值,map函数可以找到最大值在每个块的输入数据,然后reduce函数可以找到单一的最大价值在所有中间最大值。

这图显示了减少的阶段mapreduce算法。

说明减少阶段MapReduce算法:中间排序阶段,降低阶段,KeyValueStore,最终输出数据存储。

的减少阶段mapreduce算法有以下步骤:

  1. 的映射阶段的结果mapreduce算法是一个中间KeyValueStore对象,该对象包含所有的键-值对添加地图功能。在调用reduce函数之前,mapreduce组中的值中间KeyValueStore对象通过独特的关键。每一个独特的关键在中间KeyValueStore对象的结果在一个叫reduce函数。

  2. 对于每一个关键,mapreduce创建一个ValueIterator对象,该对象包含所有与该键关联的值。

  3. reduce函数通过值卷轴ValueIterator对象使用hasnextgetnext功能,通常用于循环。

  4. 执行汇总计算后,reduce函数将一个或多个键值对添加到决赛KeyValueStore对象使用添加addmulti功能。

的减少阶段mapreduce算法完成当reduce函数处理所有独特的中间键及其关联值。的这个阶段的结果mapreduce算法(类似于图阶段)KeyValueStore对象包含所有最终的键-值对添加reduce函数。减少阶段后,mapreduce的键值对KeyValueStore在一个数据存储(并返回它们KeyValueDatastore对象默认情况下)。的键值对输出数据存储不是按顺序;他们出现在相同的顺序添加reduce函数。

Reduce函数的要求

mapreduce自动调用reduce函数为每个唯一键的中间KeyValueStore对象,因此reduce函数必须满足某些基本要求在这些自动调用正常运行。这些需求共同确保适当的运动数据通过减少的阶段mapreduce算法。

reduce函数的输入intermKey,intermValIter,outKVStore:

  • intermKey是一个独特的键映射添加的功能。每次调用reduce函数mapreduce指定一个新的唯一键键的中间KeyValueStore对象。

  • intermValIterValueIterator与活跃的关键,相关联的对象intermKey。这ValueIterator对象包含所有关键与活动相关联的值。滚动使用的值hasnextgetnext功能。

  • outKVStore最后的名称吗KeyValueStorereduce函数的对象需要添加键值对。的添加addmulti函数使用这个对象名称添加键值输出。mapreduce输出键-值对outKVStore在输出数据存储并返回它们,这是一个KeyValueDatastore默认对象。如果reduce函数不添加任何键-值对outKVStore,然后mapreduce返回一个空的数据存储。

除了这些基本要求减少功能,添加的键值对,reduce函数也必须满足这些条件:

  1. 键必须是一个数字标量、特征向量或字符串。数字键不能、逻辑、复杂或稀疏。

  2. reduce函数添加的所有钥匙必须具有相同的类,但这类可能不同于映射键添加的类的功能。

  3. 如果OutputType的观点mapreduce“二元”(默认),然后是一个增值的减少可以是任何MATLAB函数®对象,包括所有有效的MATLAB数据类型。

  4. 如果OutputType的观点mapreduce“TabularText”,然后是一个增值的减少可以是一个数值标量函数,特征向量,或字符串。在这种情况下,价值不能复杂的逻辑,或稀疏。

请注意

上面的键-值对的需求可能不同与其他产品一起使用时下载188bet金宝搏mapreduce。看到合适的产品的文档产品特定的键-值对的需求。

减少样本函数

这里有一些说明性的减少函数中使用mapreduce的例子。

简单的减少函数

减速机的一个最简单的例子maxArrivalDelayReducer,这是减速器的例子发现和MapReduce最大值。map函数在这个例子中发现的最大的到来推迟每个块的输入数据。然后reduce函数完成任务通过单一的最大价值在所有中间最大值。找到最大值,减速器卷轴中的值ValueIterator对象和比较了当前每个值最大。mapreduce只调用这个减速器函数一次,因为映射器添加一个独特的关键中间体KeyValueStore对象。reduce函数添加一个键-值对输出。

函数maxArrivalDelayReducer (intermKey intermValIter outKVStore)% intermKey是“PartialMaxArrivalDelay”。intermValIter迭代器%的所有值的关键“PartialMaxArrivalDelay”。maxVal =无穷;hasnext (intermValIter) maxVal = max (getnext (intermValIter), maxVal);结束%的键-值对添加到outKVStore将成为mapreduce的输出添加(outKVStore“MaxArrivalDelay”,maxVal);结束

先进的Reduce函数

减速机的一个更高级的例子statsByGroupReducer,这是减速器的例子使用MapReduce计算汇总统计的组。map函数在这个例子组每个输入的数据使用一个额外的参数(航空母舰,月,等等),然后计算每组几个统计量的数据。reduce函数完成的任务检索统计数量和连接成长向量,然后利用向量来计算最终的统计量数,意思是,方差,偏态和峰态。减速机存储这些值作为结构领域,所以,每一个独特的关键结构统计量的输出。

函数statsByGroupReducer (intermKey intermValIter outKVStore)% StatisticsByGroupMapReduceExample减速功能。% 2014年版权MathWorks公司。n = [];m = [];v = [];s = [];k = [];%得到所有的中间数据集hasnext (intermValIter)值= getnext (intermValIter);n = [n;值(1)];m = [m;值(2)];v = [v;值(3)];s =[年代;值(4)];k = [k; value(5)];结束%注意,这种方法假设连接中间值符合%在内存中。指的是减速机功能,covarianceReducer,% CovarianceMapReduceExample减少另一种成对的方法%将中间结果数= (n)之和;meanVal = (n。*米)/数总和;d = m - meanVal;方差=(和(n。* v) +和(n。* d。^ 2)) /计数;skewnessVal =(数目(n。* s) + (n。* d。* (3 * v + d。^ 2)))。/方差(计数* ^ (1.5));kurtosisVal =(和k (n。*) +和(n。* d。* (4 * s + 6。* v。* d + d。^ 3))) /(方差数* ^ 2);有价值=结构(“数”数,“的意思是”meanVal,“方差”方差,“偏斜”skewnessVal,“峰度”,kurtosisVal);%将结果添加到输出数据存储添加(outKVStore intermKey、有价值);

更多的减少功能

关于常见的编程模式映射的更多信息或减少功能,看看建立有效的MapReduce算法

另请参阅

|||||

相关的话题