Main Content

addmulti

向 KeyValueStore 中添加多个键-值对组

说明

示例

addmulti(KVStore,keys,values)KVStore 中添加多个键-值对组,后者是在 mapreduce 执行期间创建的 KeyValueStore。在编写用于 mapreduce 的 map 或 reduce 函数中使用 addmulti 存储中间或最终键-值对组信息。

示例

全部折叠

在 map 和 reduce 函数中使用 addaddmulti 将数据传递给中间和最后的 KeyValueStore。此示例使用 identity map 和 reduce 函数,直接将输入传递给输出。map 和 reduce 函数作为局部函数列在示例的末尾。

inds = tabularTextDatastore('airlinesmall.csv','SelectedVariableNames',...
    {'ArrDelay','DepDelay'},'TreatAsMissing','NA');
preview(inds)
ans=8×2 table
    ArrDelay    DepDelay
    ________    ________

        8          12   
        8           1   
       21          20   
       13          12   
        4          -1   
       59          63   
        3          -2   
       11          -1   

outds = mapreduce(inds,@myMapper,@myReducer,mapreducer(0));
********************************
*      MAPREDUCE PROGRESS      *
********************************
Map   0% Reduce   0%
Map  16% Reduce   0%
Map  32% Reduce   0%
Map  48% Reduce   0%
Map  65% Reduce   0%
Map  81% Reduce   0%
Map  97% Reduce   0%
Map 100% Reduce   0%
Map 100% Reduce  50%
Map 100% Reduce 100%
readall(outds)
ans=2×2 table
        Key               Value      
    ____________    _________________

    {'ArrDelay'}    {123523x1 double}
    {'DepDelay'}    {123523x1 double}

局部函数

function myMapper(data,info,intermKV)
    addmulti(intermKV,{'ArrDelay' 'DepDelay'},{data.ArrDelay data.DepDelay});
end

function myReducer(key,intermValIter,outKV)
    data = getnext(intermValIter);
    while hasnext(intermValIter)
        data = [data; getnext(intermValIter)];
    end
    add(outKV,key,data);
end

输入参数

全部折叠

键-值对组存储对象,指定为 KeyValueStore 对象。mapreduce 函数在执行期间自动创建 KeyValueStore 对象:

  • 在 map 函数中,中间 KeyValueStore 对象的名称是 map 函数 myMapper(data, info, intermKVStore) 的第三个输入参数。在 map 函数中使用同一变量名称通过 addaddmulti 添加中间键-值对组。

  • 在 reduce 函数中,最终 KeyValueStore 对象的名称是 reduce 函数 myReducer(intermKey, intermValIter, outKVStore) 的第三个输入参数。在 reduce 函数中使用同一变量名称通过 addaddmulti 添加最终键-值对组。

有关详细信息,请参阅 KeyValueStore

键,指定为数值标量、数值向量、字符向量、字符串数组、字符向量元胞向量或数值标量元胞向量。如果这些键是数值向量、元胞向量或字符串数组,则每个条目指定一个不同键。

由 map 函数添加的所有键必须具有同一类。由 reduce 函数添加的所有键必须具有同一类,但该类可能不同于由 map 函数添加的键的类。

数值键不能为 NaN、复数、逻辑值或稀疏矩阵。

示例: addmulti(intermKVStore,{'Sum'; 'Count'; 'Variance'},{sum(X); numel(X); var(X)}) 向中间 KeyValueStore 对象(名为 intermKVStore)中添加三个键-值对组,并使用元胞向量指定这些键。

示例: addmulti(intermKVStore,[1 2 3 4],{sum(X); mean(X); max(X); min(X)}) 向中间 KeyValueStore 对象中添加四个键-值对组,并使用数值向量指定这些键。

示例: addmulti(outKVStore,'Stats',{[mean(X) max(X) min(X) var(X) std(X)]}) 向最终 KeyValueStore 对象(名为 outKVStore)中添加单个键-值对组,并使用字符向量作为键。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

值,指定为元胞数组。元胞数组中的每个条目用于指定一个键-值对组中的值,因此 numel(values) 必须等于键的数量。元胞数组中的条目可以是任何 MATLAB® 对象,包括所有有效的 MATLAB 数据类型。

mapreduceOutputType 参数会影响 reduce 函数可添加的值类型:

  • 如果 OutputType'Binary'(默认值),则由 reduce 函数添加的值可以是任何 MATLAB 对象。

  • 如果 OutputType'TabularText',则在使用 add 函数时由 reduce 函数添加的值可以是数值标量、字符向量或字符串标量。另外,可以使用 addmulti 函数添加多个带数值向量、字符向量元胞向量、数值标量元胞向量或字符串数组的值。在每种情况下,数值都不能是 NaN、复数、逻辑值或稀疏矩阵。

注意

在使用包含 mapreduce 的其他产品时,上述键-值对组要求可能不同。请参阅相应产品的文档以获得产品特定的键-值对组要求。

示例: addmulti(intermKVStore,{'Sum'; 'Count'; 'Variance'},{sum(X); numel(X); var(X)}) 向名为 intermKVStore 的中间 KeyValueStore 对象添加三个键-值对组。

示例: addmulti(intermKVStore,[1 2 3 4],{sum(X); mean(X); max(X); min(X)}) 使用元胞向量向中间 KeyValueStore 对象中添加四个键-值对组。

示例: addmulti(outKVStore,'Stats',{[mean(X) max(X) min(X) var(X) std(X)]}) 向最终 KeyValueStore 对象(名为 outKVStore)中添加一个键-值对组。

示例: addmulti(outKVStore,{'Distance' 'Time'},{table.Distance table.Time}) 添加两个键-值对组并使用表中的变量指定值。

提示

  • 请勿在循环中使用 add,因为这会对 mapreduce 执行时间产生不利影响。改用元胞数组收集多个值(如果可以,使用向量化运算)并调用一次 addmulti

版本历史记录

在 R2014b 中推出