メインコンテンツ

addmulti

R2026b

キーと値の複数のペアを KeyValueStore に追加

説明

addmulti(KVStore,keys,values) は、キーと値の複数のペアを KVStore (mapreduce の実行時に作成される KeyValueStore) に追加します。addmulti は、中間または最終のキーと値のペアの情報を格納するために、mapreduce で使用する map 関数または reduce 関数で使用します。

例

例

すべて折りたたむ

map 関数および reduce 関数で add および addmulti を使用して、データを中間および最終の KeyValueStore に渡します。この例では、入力を出力に直接渡す恒等 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 オブジェクトとして指定します。KeyValueStore オブジェクトは、関数 mapreduce の実行時に自動的に作成されます。

  • map 関数では、中間の KeyValueStore オブジェクトの名前を myMapper(data, info, intermKVStore) の 3 番目の入力引数として指定します。中間のキーと値のペアを追加するには、それと同じ変数名を map 関数の add または addmulti で使用します。

  • reduce 関数では、最終の KeyValueStore オブジェクトの名前を myReducer(intermKey, intermValIter, outKVStore) の 3 番目の入力引数として指定します。最終のキーと値のペアを追加するには、それと同じ変数名を reduce 関数の add または addmulti で使用します。

詳細については、KeyValueStore を参照してください。

キー。数値スカラー、数値ベクトル、文字ベクトル、string 配列、文字ベクトルの cell ベクトル、または数値スカラーの cell ベクトルとして指定します。キーが数値ベクトル、cell ベクトルまたは string 配列の場合は、各要素に異なるキーを指定します。

map 関数で追加するキーはすべて同じクラスでなければなりません。reduce 関数で追加するキーも同じクラスでなければなりませんが、map 関数で追加するキーとは別のクラスでもかまいません。

数値キーに NaN、複素数、論理値、スパースは使用できません。

例: addmulti(intermKVStore,{'Sum'; 'Count'; 'Variance'},{sum(X); numel(X); var(X)}) は、cell ベクトルでキーを指定して、中間の KeyValueStore オブジェクト intermKVStore にキーと値のペアを 3 つ追加します。

例: addmulti(intermKVStore,[1 2 3 4],{sum(X); mean(X); max(X); min(X)}) は、数値ベクトルでキーを指定して、中間の KeyValueStore オブジェクトにキーと値のペアを 4 つ追加します。

例: addmulti(outKVStore,'Stats',{[mean(X) max(X) min(X) var(X) std(X)]}) は、文字ベクトルをキーとして使用して、最終の KeyValueStore オブジェクト outKVStore にキーと値のペアを 1 つ追加します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

値。cell 配列として指定します。cell 配列の各エントリでキーと値のペアの値を指定するため、numel(values) がキーの数と等しくなければなりません。cell 配列のエントリは、任意の MATLAB® オブジェクトにすることができます。これには、MATLAB のすべての有効なデータ型が含まれます。

reduce 関数で追加できる値のタイプは mapreduce の OutputType 引数によって異なります。

  • OutputType が 'Binary' (既定) の場合は、reduce 関数で任意の MATLAB オブジェクトを追加できます。

  • OutputType が 'TabularText' の場合、関数 add を使用すると reduce 関数により数値スカラー、文字ベクトルまたは string スカラーの値を追加できます。さらに、関数 addmulti を使用すると、数値ベクトル、文字ベクトルの cell ベクトル、数値スカラーの cell ベクトル、または string 配列を使用して複数の値を追加できます。いずれの場合も、数値を NaN、複素数、論理値、スパースにすることはできません。

メモ

上記のキーと値のペアの要件は、mapreduce を使用する製品によって異なる場合があります。使用する製品のドキュメントで、キーと値のペアに関する製品固有の要件を確認してください。

例: addmulti(intermKVStore,{'Sum'; 'Count'; 'Variance'},{sum(X); numel(X); var(X)}) は、intermKVStore という名前の中間の KeyValueStore オブジェクトにキーと値のペアを 3 つ追加します。

例: addmulti(intermKVStore,[1 2 3 4],{sum(X); mean(X); max(X); min(X)}) は、cell ベクトルを使用して中間の KeyValueStore オブジェクトにキーと値のペアを 4 つ追加します。

例: addmulti(outKVStore,'Stats',{[mean(X) max(X) min(X) var(X) std(X)]}) は、outKVStore という名前の最終の KeyValueStore オブジェクトにキーと値のペアを 1 つ追加します。

例: addmulti(outKVStore,{'Distance' 'Time'},{table.Distance table.Time}) は、table の変数で値を指定して、キーと値のペアを 2 つ追加します。

ヒント

  • mapreduce の実行時間が長くなることがあるため、ループ内では add を使用しないことをお勧めします。代わりに、cell 配列を使用して複数の値をまとめ (可能な場合はベクトル化演算を使用)、単一の addmulti の呼び出しを使用してください。

バージョン履歴

R2014b で導入