文档

写地图函数

Map函数在MapReduce中的作用

mapreduce既需要一个接收数据块并输出中间结果的输入映射函数,也需要一个读取中间结果并产生最终结果的输入reduce函数。因此,通常将一个计算分解为两个相关的部分,以便分别完成map和reduce函数。例如,要查找数据集中的最大值,map函数可以查找每个输入数据块中的最大值,然后reduce函数可以从所有中间最大值中查找单个最大值。

的Map阶段mapreduce算法。

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

  1. mapreduce方法读取单个数据块函数,然后调用map函数对数据块进行处理。

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

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

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

地图功能要求

mapreduce为输入数据存储中的每个数据块自动调用map函数。map函数必须满足某些基本要求,才能在这些自动调用期间正常运行。这些需求共同确保了数据在Map阶段的正确移动mapreduce算法。

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

  • 数据而且信息调用的结果是函数在输入端数据存储,这mapreduce在每次调用map函数之前自动执行。

  • intermKVStore是中间产物的名称吗KeyValueStore对象,map函数需要向其添加键值对。的添加而且addmulti函数使用此对象名称添加键值对。函数中没有添加任何键值对intermKVStore对象,然后mapreduce不调用reduce函数,结果数据存储为空。

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

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

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

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

请注意

使用其他产品时,上述键值对要求可能有所不同s manbetx 845mapreduce.请参阅相关产品的文档,以获得特定于产品的键值对需求。

地图示例函数

类使用的一些映射函数mapreduce的例子工具箱/ matlab /演示文件夹中。

身份映射功能

一个简单返回what的map函数mapreduce传递给它称为身份映射器.在reduce函数中进行计算之前,恒等映射器可以利用按惟一键对值进行分组。的identityMapper.mMapper文件是示例文件中使用的映射器之一TSQRMapReduceExample.m

类型identityMapper.m
function identityMapper(data, info, intermKVStore) % MapReduce TSQR示例中的Mapper函数。这个mapper函数只是复制数据,并将它们作为中间值添加到% intermKVStore。The MathWorks, Inc. x = data.Value{:,:};添加(intermKVStore,“身份”,x);

简单地图函数

非恒等映射器的一个最简单的例子是maxArrivalDelayMapper.m,它是示例文件的映射器MaxMapReduceExample.m.对于每个输入数据块,该映射程序计算最大到达延迟,并向中间添加一个键值对KeyValueStore

类型maxArrivalDelayMapper.m
function maxArrivalDelayMapper (data, info, intermKVStore) % MaxMapreduceExample的Mapper函数。% Data是一个n × 1的ArrDelay表。由于数据源是表格型的,所以read返回的%是一个表对象。partMax = max(data.ArrDelay);添加(intermKVStore PartialMaxArrivalDelay, partMax);

高级地图功能

一个更高级的映射器示例是statsByGroupMapper.m,它是示例文件的映射器StatisticsByGroupMapReduceExample.m.该映射器使用嵌套函数为每个输入数据块计算几个统计量(计数、平均值、方差等),然后向中间数据块添加几个键-值对KeyValueStore对象。此外,这个映射器使用四个输入参数,而mapreduce只接受带有三个输入参数的map函数。要解决这个问题,可以在调用期间使用匿名函数传入额外的参数mapreduce,如示例中所述。

类型statsByGroupMapper.m
StatisticsByGroupMapReduceExample. function statsbygrouppapper (data, ~, intermKVStore, groupVarName) % Mapper函数。数据是一个n × 3的表。首先删除缺失的值groups = data.(groupVarName);notNaN = ~ isnan(延迟);groups = groups(notNaN);延迟=延迟(notNaN);%找到这个chunk中唯一的组级别[intermKeys,~,idx] = unique(groups, 'stable');intermVals = accumarray(idx, deferred,size(intermKeys),@grpstatsfun);addmulti (intermKVStore intermKeys intermVals); function out = grpstatsfun(x) n = length(x); % count m = sum(x)/n; % mean v = sum((x-m).^2)/n; % variance s = sum((x-m).^3)/n; % skewness without normalization k = sum((x-m).^4)/n; % kurtosis without normalization out = {[n, m, v, s, k]};

更多地图功能

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

另请参阅

|||

相关的话题

这个话题有帮助吗?