主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

MapReduceによる平均値の計算

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

データの準備

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

ds = tabularTextDatastore (“airlinesmall.csv”“TreatAsMissing”“NA”);ds。SelectedVariableNames =“ArrDelay”

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

预览(ds)
ans =8×1表ArrDelay ________ 8 8 21 13 4 59 3 11

mapreduceの実行

関数mapreduceは,入力として地图関数と减少関数を必要とします。マッパーはデータのブロックを受け取って中間結果を出力します。リデューサーは中間結果を読み取って最終結果を生成します。

次の例では,マッパーによりデータの各ブロック内の到着遅延時間のカウントと合計を求めます。次にマッパーは,これらの値をキー“PartialCountSumDelay”に関連付けられた中間値として保存します。

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

函数meanArrivalDelayMapper (data, info, intermKVStore)% Data是一个n × 1的ArrDelay表。首先删除缺失值:数据(isnan (data.ArrDelay ),:) = [];%记录部分计数和总和,减数人将其累加。partCountSum = [length(data.ArrDelay), sum(data.ArrDelay)];添加(intermKVStore“PartialCountSumDelay”, partCountSum);结束

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

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

函数meanArrivalDelayReducer(intermKey, intermValIter, outKVStore) count = 0; / /指定指定时间金额= 0;hasnext(intermValIter) countSum = getnext(intermValIter);count = count + countSum(1);sum = sum + countSum(2);结束meanDelay = /数总和;%添加到outKVStore的键值对将成为mapreduce的输出添加(outKVStore“MeanArrivalDelay”, meanDelay);结束

mapreduceを使用して,地图関数および减少関数をデータストアdsに適用します。

meanDelay = mapreduce(ds, @meanArrivalDelayMapper, @meanArrivalDelayReducer);
******************************** * MAPREDUCE的进展  * ******************************** 地图地图16%减少0% 32% 0%减少0%减少0%地图48%减少0% 65%减少0%地图81%减少0% 97%减少0%地图100%减少0% 100%减少100%

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

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

readall (meanDelay)
ans =1×2表键值  ____________________ __________ {' MeanArrivalDelay’}{[7.1201]}

ローカル関数

ここに挙げるのは,mapreduceがデータに適用する地图関数と减少関数です。

函数meanArrivalDelayMapper (data, info, intermKVStore)% Data是一个n × 1的ArrDelay表。首先删除缺失值:数据(isnan (data.ArrDelay ),:) = [];%记录部分计数和总和,减数人将其累加。partCountSum = [length(data.ArrDelay), sum(data.ArrDelay)];添加(intermKVStore“PartialCountSumDelay”, partCountSum);结束%-------------------------------------------------------------------------函数meanArrivalDelayReducer(intermKey, intermValIter, outKVStore) count = 0; / /指定指定时间金额= 0;hasnext(intermValIter) countSum = getnext(intermValIter);count = count + countSum(1);sum = sum + countSum(2);结束meanDelay = /数总和;%添加到outKVStore的键值对将成为mapreduce的输出添加(outKVStore“MeanArrivalDelay”, meanDelay);结束%-------------------------------------------------------------------------

参考

|

関連するトピック