Main Content

KeyValueStore

存储用于 mapreduce 的键-值对组

说明

mapreduce 函数在执行期间自动创建 KeyValueStore 对象,并将其用于存储由 map 和 reduce 函数添加的键-值对组。尽管您绝不需要显式创建 KeyValueStore 对象以使用 mapreduce,但您需要使用 addaddmulti 对象函数在 map 和 reduce 函数中与此对象交互。

创建对象

mapreduce 函数在执行期间自动创建 KeyValueStore 对象。

对象函数

add向 KeyValueStore 中添加单个键-值对组
addmulti向 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 函数使用 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]};

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2014b 中推出