Добавьте несколько пары "ключ-значение" к KeyValueStore
addmulti(
добавляет несколько пары "ключ-значение" к KVStore
,keys
,values
)KVStore
, который является KeyValueStore
созданный во время mapreduce
выполнение. Использовать addmulti
в карте или уменьшить функцию, написанную для использования с mapreduce
для хранения информации о промежуточной или конечной паре "ключ-значение".
Использование add
и addmulti
в отображении и уменьшении функций для передачи данных в промежуточный и конечный KeyValueStore
. Этот пример использует единичную карту и функции сокращения, которые передают входы прямо к выходу. Функции 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)
. Используйте это же имя переменной, чтобы добавить промежуточные пары "ключ-значение" с add
или addmulti
в функции map.
В функции reduce имя конечного KeyValueStore
объект является третьим входным параметром в функции сокращения, myReducer(intermKey, intermValIter, outKVStore)
. Используйте это же имя переменной, чтобы добавить последние пары "ключ-значение" с 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.
The OutputType
аргумент mapreduce
влияет на тип значений, которые может добавить функция reduce:
Если на OutputType
является 'Binary'
(по умолчанию), тогда значение, добавленное функцией reduce, может быть любым объектом MATLAB.
Если на OutputType
является 'TabularText'
, тогда значение, добавленное редукционной функцией, может быть числовым скаляром, вектором символов или строковым скаляром при использовании add
функция. Кроме того, вы можете использовать addmulti
функция для добавления нескольких значений с числовым вектором, камерой вектором векторов символов, камеры вектором с числовыми скалярами или строковыми массивами. В каждом случае числовые значения не могут быть NaN
, сложный, логический или разреженный.
Примечание
Вышеуказанные требования к паре "ключ-значение" могут отличаться при использовании других продуктов с mapreduce. Ознакомьтесь с документацией по соответствующему продукту, чтобы получить требования к паре "ключ-значение" продукта.
Пример: 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
.
Пример: addmulti(outKVStore,{'Distance' 'Time'},{table.Distance table.Time})
добавляет две пары "ключ-значение", используя переменные в таблице, чтобы задать значения.
Избегайте использования add
в цикле, так как это может негативно повлиять mapreduce
время выполнения. Вместо этого используйте массивы ячеек, чтобы собрать несколько значений (используя векторизованные операции, если это возможно) и использовать один вызов к addmulti
.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.