Добавление нескольких пар «ключ-значение» в KeyStartStore
addmulti( добавляет несколько пар ключ-значение к KVStore,keys,values)KVStore, который является KeyValueStore создано во время mapreduce исполнение. Использовать addmulti в карте или уменьшить функцию, написанную для использования с mapreduce для хранения промежуточной или окончательной информации о паре ключ-значение.
Использовать add и addmulti в карте и уменьшить функции для передачи данных в промежуточный и конечный KeyValueStore. В этом примере используется карта идентификаторов и сокращаются функции, которые передают входные данные непосредственно на выход. Функции отображения и сокращения перечислены в конце примера как локальные функции.
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 объект во время выполнения:
В функции карты имя промежуточного KeyValueStore объект является третьим входным аргументом функции отображения, myMapper(data, info, intermKVStore). Используйте это же имя переменной для добавления промежуточных пар ключ-значение с add или addmulti в функции карты.
В функции уменьшения имя конечного KeyValueStore объект является третьим входным аргументом функции уменьшения, myReducer(intermKey, intermValIter, outKVStore). Используйте это же имя переменной для добавления последних пар ключ-значение с add или addmulti в функции уменьшения.
Дополнительные сведения см. в разделе KeyValueStore.
keys - КлючиКлавиши, определяемые как числовой скаляр, числовой вектор, символьный вектор, строковый массив, вектор ячеек символьных векторов или вектор ячеек числовых скаляров. Если ключи являются числовым вектором, вектором ячейки или строковым массивом, то каждая запись определяет отдельный ключ.
Все ключи, добавленные функцией карты, должны иметь один и тот же класс. Ключи, добавляемые функцией уменьшения, также должны иметь тот же класс, но этот класс может отличаться от класса ключей, добавляемых функцией отображения.
Числовые ключи не могут быть 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.
OutputType аргумент mapreduce влияет на тип значений, которые может добавить функция уменьшения:
Если OutputType является 'Binary' (по умолчанию), то значением, добавляемым функцией уменьшения, может быть любой объект MATLAB.
Если OutputType является 'TabularText', то значение, добавляемое функцией уменьшения, может быть числовым скаляром, символьным вектором или строковым скаляром при использовании add функция. Кроме того, можно использовать addmulti функция для добавления нескольких значений с числовым вектором, вектором ячеек символьных векторов, вектором ячеек числовых скаляров или строковым массивом. В каждом случае числовые значения не могут быть NaN, сложный, логический или разреженный.
Примечание
Вышеуказанные требования к паре ключ-значение могут отличаться при использовании других продуктов с mapreduction. См. документацию по соответствующему продукту, чтобы получить требования к паре ключ-значение для конкретного продукта.
Пример: 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.