目录
将键-值对组添加到 map 函数中的 KeyValueStore
将多个键-值对组添加到 map 函数中的 KeyValueStore
KeyValueStore函数的功能是存储用于 mapreduce 的键-值对组。
说明
mapreduce 函数在执行期间自动创建 KeyValueStore 对象,并将其用于存储由 map 和 reduce 函数添加的键-值对组。尽管绝不需要显式创建 KeyValueStore 对象以使用 mapreduce,但需要使用 add 和 addmulti 对象函数在 map 和 reduce 函数中与此对象交互。
创建对象
mapreduce 函数在执行期间自动创建 KeyValueStore 对象。
对象函数
add | 向 KeyValueStore 中添加单个键-值对组 |
addmulti | 向 KeyValueStore 中添加多个键-值对组 |
示例
将键-值对组添加到 map 函数中的 KeyValueStore
下面的 map 函数使用 add 函数将键-值对组添加到中间的 KeyValueStore 对象(名称为 intermKVStore),一次添加一个。
function MeanDistMapFun(data, info, intermKVStore)
distances = data.Distance(~isnan(data.Distance));
sumLenKey = 'sumAndLength';
sumLenValue = [sum(distances), length(distances)];
add(intermKVStore, sumLenKey, sumLenValue);
end
将多个键-值对组添加到 map 函数中的 KeyValueStore
下面的 map 函数使用 addmulti 将多个键-值对组添加到中间的 KeyValueStore 对象(名称为 intermKVStore)。请注意,这个 map 函数收集 intermKeys 变量中的多个键以及 intermVals 变量中的多个值。这样调用 addmulti 一次后便可添加所有的键-值对组。最好采用调用 addmulti 一次的方式,而不是在循环中使用 add。
function meanArrivalDelayByDayMapper(data, ~, intermKVStore)
% Mapper function for the MeanByGroupMapReduceExample.
% Copyright 2014 The MathWorks, Inc.
% Data is an n-by-2 table: first column is the DayOfWeek and the second
% is the ArrDelay. Remove missing values first.
delays = data.ArrDelay;
day = data.DayOfWeek;
notNaN =~isnan(delays);
day = day(notNaN);
delays = delays(notNaN);
% find the unique days in this chunk
[intermKeys,~,idx] = unique(day, 'stable');
% group delays by idx and apply @grpstatsfun function to each group
intermVals = accumarray(idx,delays,size(intermKeys),@countsum);
addmulti(intermKVStore,intermKeys,intermVals);
function out = countsum(x)
n = length(x); % count
s = sum(x); % mean
out = {[n, s]};