Main Content

add

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

说明

示例

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

示例

全部折叠

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

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

        8   
        8   
       21   
       13   
        4   
       59   
        3   
       11   

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 100%
readall(outds)
ans=1×2 table
        Key               Value      
    ____________    _________________

    {'ArrDelay'}    {123523x1 double}

局部函数

function myMapper(data,info,intermKV)
    add(intermKV, 'ArrDelay',data.ArrDelay);
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、复数、逻辑值或稀疏矩阵。

示例: add(intermKVStore,'Sum',sum(X)) 向 map 函数中的中间 KeyValueStore 对象(名为 intermKVStore)添加一个键-值对组。

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

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

值,指定为任何 MATLAB 对象。这包括所有有效的 MATLAB 数据类型。

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

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

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

注意

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

示例: add(intermKVStore,'Sum',sum(X)) 指定一个要与键配对的标量值。

示例: add(outKVStore,'Stats',[mean(X) max(X) min(X) var(X) std(X)]) 指定一个数值数组作为要与键配对的值。

提示

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

版本历史记录

在 R2014b 中推出