ドキュメンテーション

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

MapReduce による平均値の計算

この例では、mapreduce を使用してデータセット内で単一の変数の平均を計算する方法を示します。mapreduce を、単一のキー、最低限の計算および中間状態 (中間合計およびカウントの累積) で使用する簡単な方法を示します。

データの準備

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

ds = datastore('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 関数を必要とします。マッパーはデータのチャンクを受け取って中間結果を出力します。リデューサーは中間結果を読み取って最終結果を生成します。

次の例では、マッパーによりデータの各チャンク内の到着遅延時間のカウントと合計を検出します。次にマッパーは、これらの値をキー 'PartialCountSumDelay' に関連付けられた中間値として保存します。

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

function meanArrivalDelayMapper (data, info, intermKVStore)
% Mapper function for the MeanMapReduceExample.

% Copyright 2014 The MathWorks, Inc.

% Data is an n-by-1 table of the ArrDelay. Remove missing value first:
data(isnan(data.ArrDelay),:) = [];

% Record the partial counts and sums and the reducer will accumulate them.
partCountSum = [length(data.ArrDelay), sum(data.ArrDelay)];
add(intermKVStore, 'PartialCountSumDelay',partCountSum);

リデューサーは、マッパーが保存した各チャンクのカウントと合計を受け入れます。そしてこの値を合計して、総カウントと総合計を求めます。全体の平均到着遅延時間は、値を単純に除算したものです。マッパーは単一の一意なキーのみを追加するため、mapreduce は、このリデューサーを一度だけ呼び出します。リデューサーは、add を使用して単一のキーと値のペアを出力に追加します。

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

function meanArrivalDelayReducer(intermKey, intermValIter, outKVStore)
% Reducer function for the MeanMapReduceExample.

% Copyright 2014 The MathWorks, Inc.

% intermKey is 'PartialCountSumDelay'
count = 0;
sum = 0;
while hasnext(intermValIter)
   countSum = getnext(intermValIter);
   count = count + countSum(1);
   sum = sum + countSum(2);
end

meanDelay = sum/count;

% The key-value pair added to outKVStore will become the output of mapreduce 
add(outKVStore,'MeanArrivalDelay',meanDelay);

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

meanDelay = mapreduce(ds, @meanArrivalDelayMapper, @meanArrivalDelayReducer);
********************************
*      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 は、現在のフォルダー内のファイルでデータ ストア meanDelay を返します。

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

readall(meanDelay)
ans =

  1x2 table

           Key             Value  
    __________________    ________

    'MeanArrivalDelay'    [7.1201]

参考

|

関連するトピック