主要内容

编写映射函数

MapReduce中Map函数的作用

地图还原需要一个接收数据块并输出中间结果的输入映射函数和一个读取中间结果并产生最终结果的输入reduce函数。因此,对于map和reduce函数来说,将计算分解为两个相关的部分是正常的。例如,要在一个数据集中找到最大值,map函数可以在输入数据的每个块中找到最大值,然后reduce函数可以在所有中间最大值中找到单个最大值。

该图显示了地图还原算法。

的Map阶段地图还原算法有以下步骤:

  1. 地图还原方法读取单个数据块阅读函数,然后调用map函数来处理块。

  2. 然后,map函数处理单个数据块,并向中间添加一个或多个键值对KeyValueStore对象使用添加addmulti功能。

  3. 地图还原对输入数据存储中的每个数据块重复此过程,以便对map函数的调用总数等于数据块的数量。的ReadSize数据存储的属性决定数据块的数量。

的Map阶段地图还原当map函数处理输入数据存储中的每个数据块时,算法就完成了。这一阶段的结果地图还原算法是一个KeyValueStore对象,该对象包含由map函数添加的所有键值对。在Map阶段之后,地图还原属性中的所有值进行分组,为Reduce阶段做准备KeyValueStore对象的唯一键。

地图功能的要求

地图还原数据存储区中每个数据块的输入函数都会自动调用。map函数必须满足某些基本要求,才能在这些自动调用期间正常运行。这些要求共同确保数据在映射阶段的正确移动地图还原算法。

映射函数的输入是数据信息intermKVStore

  • 数据信息电话的结果是阅读函数的输入数据存储地图还原在每次调用map函数之前自动执行。

  • intermKVStore是中间层的名称KeyValueStore对象,映射函数需要向其添加键值对。的添加addmulti函数使用这个对象名来添加键值对。属性中没有添加任何键值对intermKVStore那么,反对吧地图还原不调用reduce函数,结果数据存储为空。

除了map函数的这些基本要求外,map函数添加的键值对还必须满足以下条件:

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

  2. 所有由map函数添加的键必须具有相同的类。

  3. 值可以是任意值®对象,包括所有有效的MATLAB数据类型。

请注意

使用其他产品时,上述键值对要求可能会有所不同下载188bet金宝搏地图还原。请参阅相应产品的文档,以获取特定于产品的键值对要求。

示例映射函数

这里有一些使用的说明性地图函数地图还原的例子。

身份映射函数

一个map函数,它只返回地图还原传递到它被称为身份映射器.在reduce函数中进行计算之前,身份映射器可以利用按唯一键对值进行分组。的identityMapperMapper文件是示例中使用的映射程序之一基于MapReduce的TSQR矩阵分解

作用identityMapper(数据、信息、intermKVStore)这个映射函数简单地复制数据并将它们添加到% intermKVStore作为中间值。x=data.Value{:,:};add(intermKVStore,“身份”,x);结束

简单的映射函数

非身份映射器的最简单示例之一是maxArrivalDelayMapper,这是示例的映射器使用MapReduce查找最大值.对于每个输入数据块,这个映射器计算最大到达延迟,并向中间添加一个键值对KeyValueStore

作用maxArrivalDelayMapper(数据、信息、intermKVStore)partMax=max(数据.ArrDelay);添加(中间存储,“PartialMaxArrivalDelay”,partMax);结束

高级地图功能

映射器的更高级示例是statsByGroupMapper,这是示例的映射器使用MapReduce按组计算摘要统计信息。此映射器使用嵌套函数为每个输入数据块计算多个统计量(计数、平均值、方差等),然后将多个键值对添加到中间值KeyValueStore此外,此映射器使用四个输入参数,而地图还原仅接受具有三个输入参数的映射函数。若要避免此问题,请在调用时使用匿名函数传入额外参数地图还原,如示例中所述。

作用statsByGroupMapper(数据、~、intermKVStore、groupVarName)%数据是一个n × 3的表。首先删除缺失值延迟=数据。ArrDelay;组=数据。(groupVarName);notNaN=~isnan(延迟);组=组(notNaN);延迟=延迟(notNaN);在这个块中找到唯一的组级别[intermKeys ~, idx] =独特(组,“稳定”);%按idx分组延迟,并对每个组应用@grpstatsfun函数间隔=accumarray(idx、延迟、大小(间隔键),@grpstatsfun);addmulti(intermKVStore、intermkey、intervals);作用out=grpstatsfun(x)n=长度(x);%数m = (x) / n;%卑鄙v = ((x m) ^ 2)之和/ n;%方差s=总和((x-m)。^3)/n;未归一化的偏度%k = ((x m) ^ 4)之和/ n;未归一化的峰度百分比out={[n,m,v,s,k]};结束结束

更多地图功能

有关map或reduce函数中常见编程模式的更多信息,请参阅使用MapReduce构建有效的算法

另请参阅

|||

相关话题