写地图函数
Map函数在MapReduce中的作用
mapreduce
既需要一个接收数据块并输出中间结果的输入映射函数,也需要一个读取中间结果并产生最终结果的输入reduce函数。因此,通常将一个计算分解为两个相关的部分,以便分别完成map和reduce函数。例如,要查找数据集中的最大值,map函数可以查找每个输入数据块中的最大值,然后reduce函数可以从所有中间最大值中查找单个最大值。
的Map阶段mapreduce
算法。
的Map阶段mapreduce
算法有以下步骤:
mapreduce
方法读取单个数据块读
函数,然后调用map函数对数据块进行处理。然后map函数处理单个数据块,并向中间添加一个或多个键值对
KeyValueStore
对象使用添加
或addmulti
功能。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函数添加的键值对还必须满足以下条件:
键必须是数字标量或字符向量。数字键不能是
南
复杂的、逻辑的或稀疏的。map函数添加的所有键必须具有相同的类。
值可以是任何MATLAB®对象,包括所有有效的MATLAB数据类型。
请注意
使用其他产品时,上述键值对要求可能有所不同s manbetx 845mapreduce
.请参阅相关产品的文档,以获得特定于产品的键值对需求。
地图示例函数
类使用的一些映射函数mapreduce
的例子工具箱/ matlab /演示
文件夹中。
身份映射功能
一个简单返回what的map函数mapreduce
传递给它称为身份映射器.在reduce函数中进行计算之前,恒等映射器可以利用按惟一键对值进行分组。的identityMapper.m
Mapper文件是示例文件中使用的映射器之一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构建有效的算法.