addmulti
向 KeyValueStore 中添加多个键-值对组
说明
示例
在 map 和 reduce 函数中使用 add 和 addmulti 将数据传递给中间和最后的 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'} {123523×1 double}
{'DepDelay'} {123523×1 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 函数中使用同一变量名称通过add或addmulti添加中间键-值对组。在 reduce 函数中,最终
KeyValueStore对象的名称是 reduce 函数myReducer(intermKey, intermValIter, outKVStore)的第三个输入参量。在 reduce 函数中使用同一变量名称通过add或addmulti添加最终键-值对组。
有关详细信息,请参阅 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 数据类型。
mapreduce 的 OutputType 参量会影响 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 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)