addmulti
向 KeyValueStore 中添加多个键-值对组
说明
示例
向 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'} {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
输入参数
KVStore
— 键-值对组存储对象
KeyValueStore
对象
键-值对组存储对象,指定为 KeyValueStore
对象。mapreduce
函数在执行期间自动创建 KeyValueStore
对象:
在 map 函数中,中间
KeyValueStore
对象的名称是 map 函数myMapper(data, info, intermKVStore)
的第三个输入参量。在 map 函数中使用同一变量名称通过add
或addmulti
添加中间键-值对组。在 reduce 函数中,最终
KeyValueStore
对象的名称是 reduce 函数myReducer(intermKey, intermValIter, outKVStore)
的第三个输入参量。在 reduce 函数中使用同一变量名称通过add
或addmulti
添加最终键-值对组。
有关详细信息,请参阅 KeyValueStore
。
keys
— 键
数值标量 | 数值向量 | 字符向量 | 字符串数组 | 字符向量元胞向量 | 数值标量元胞向量
键,指定为数值标量、数值向量、字符向量、字符串数组、字符向量元胞向量或数值标量元胞向量。如果这些键是数值向量、元胞向量或字符串数组,则每个条目指定一个不同键。
由 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
values
— 值
元胞数组
值,指定为元胞数组。元胞数组中的每个条目用于指定一个键-值对组中的值,因此 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 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)