ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

MapReduce を使用した最大値の検索

次の例では、mapreduce を使用してデータセット内の単独の変数の最大値を検索する方法を示します。キーは 1 つのみで最低限の計算を行うため、これは mapreduce の最も簡単な使用法を示しています。

データの準備

airlinesmall.csv データセットを使用してデータ ストアを作成します。この 12 MB のデータセットには、到着時間と出発時間を含む、いくつかの航空会社のフライト情報が 29 列に含まれます。この例では、ArrDelay (フライト到着遅延時間) を目的の変数として選択します。

ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA');
ds.SelectedVariableNames = 'ArrDelay';

データ ストアは、既定では 'NA' 値を欠損として扱い、欠損値を NaN 値に置換します。さらに、SelectedVariableNames プロパティにより、選択した目的の変数のみを処理することができ、preview を使用して検査できます。

preview(ds)
ans =

  8x1 table

    ArrDelay
    ________

        8   
        8   
       21   
       13   
        4   
       59   
        3   
       11   

mapreduce の実行

関数 mapreduce は、入力として map 関数と reduce 関数を必要とします。マッパーはデータのチャンクを受け取って中間結果を出力します。リデューサーは中間結果を読み取って最終結果を生成します。

この例では、マッパーはデータの各チャンク内の最大到着遅延時間を検索します。次にマッパーは、これらの最大値をキー 'PartialMaxArrivalDelay' に関連付けられた中間値として保存します。

map 関数のファイルを表示します。

function maxArrivalDelayMapper (data, info, intermKVStore)
% Mapper function for the MaxMapreduceExample.

% Copyright 1984-2014 The MathWorks, Inc. 

% Data is an n-by-1 table of the ArrDelay. As the data source is tabular,
% the return of read is a table object.
partMax = max(data.ArrDelay);
add(intermKVStore, 'PartialMaxArrivalDelay',partMax);

リデューサーは、各チャンクの最大到着遅延時間のリストを受け取り、値のリストから全体の最大到着遅延を検索します。マッパーは単一の一意なキーのみを追加するため、mapreduce はこのリデューサーを一度だけ呼び出します。リデューサーは、add を使用して最終的なキーと値のペアを出力に追加します。

reduce 関数のファイルを表示します。

function maxArrivalDelayReducer(intermKey, intermValIter, outKVStore)
% Reducer function for the MaxMapreduceExample.

% Copyright 2014 The MathWorks, Inc.

% intermKey is 'PartialMaxArrivalDelay'. intermValIter is an iterator of
% all values that has the key 'PartialMaxArrivalDelay'.
maxVal = -inf;
while hasnext(intermValIter)
   maxVal = max(getnext(intermValIter), maxVal);
end
% The key-value pair added to outKVStore will become the output of mapreduce 
add(outKVStore,'MaxArrivalDelay',maxVal);

mapreduce を使用して、map 関数および reduce 関数をデータ ストア ds に適用します。

maxDelay = mapreduce(ds, @maxArrivalDelayMapper, @maxArrivalDelayReducer);
********************************
*      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 100%

mapreduce は、現在のフォルダー内のファイルでデータ ストア maxDelay を返します。

出力データ ストア maxDelay から最終結果を読み取ります。

readall(maxDelay)
ans =

  1x2 table

           Key           Value 
    _________________    ______

    'MaxArrivalDelay'    [1014]

参考

|

関連するトピック