Main Content

addmulti

キーと値の複数のペアを 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'}    {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

入力引数

すべて折りたたむ

キーと値のペアのストレージ オブジェクト。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 関数で追加できる値のタイプは mapreduceOutputType 引数によって異なります。

  • 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 で導入