主要内容

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

mapreduce

メモリに収まらないデータセットを解析するプログラミング手法

説明

outds= mapreduce (dsmapfunreducefun関は地图数mapfunを入力データストアdsに適用して,それぞれの一意のキーに関連付けられている値を减少関数reducefunに渡します。出力データストアは,現在のフォルダーにある.matファイルを指すKeyValueDatastoreオブジェクトです。

outds= mapreduce (dsmapfunreducefun先生は,mapreduceの実行時コンフィギュレーション設定をオプションで指定します。先生には,関数mapreduceの呼び出しの結果が入力されます。通常この引数は并行计算工具箱™,MATLAB®并行服务器™またはMATLAB编译器™と共に使用されます。詳細については,その他の製品を使用したMapReduceの高速化と展開を参照してください。

outds= mapreduce (___名称,值は,前述の任意の構文を用いて,1つ以上の名称,值のペアの引数を使用して追加オプションを指定します。たとえば,“OutputFolder”の後に,出力フォルダーへのパスを指定する文字ベクトルを指定できます。

すべて折りたたむ

mapreduceを使用して,データセット内の一意の航空会社別のフライト数をカウントします。

airlinesmall.csvデータセットを使用してデータストアを作成します。この12 MB のデータセットには、到着時間と出発時間を含む、いくつかの航空会社のフライト情報が 29 列に含まれます。この例では、UniqueCarrier(航空会社名)を目的の変数として選択します。“TreatAsMissing”の名前と値のペアを指定してデータストアが“NA”値を欠損として取り扱うようにし,“MissingValue”の名前と値のペアを指定して欠損値をゼロで置き換えるようにします。

ds = tabularTextDatastore (“airlinesmall.csv”“TreatAsMissing”“NA”...“MissingValue”, 0);ds。SelectedVariableNames =“UniqueCarrier”;ds。SelectedFormats =“% C”

データをプレビューします。

预览(ds)
ans =8×1表唯一运营商_____________ PS PS PS PS PS PS PS PS PS PS PS PS PS PS PS PS PS PS

データでmapreduceを実行します。関地图数と减少関数はデータの各ブロックにある各航空会社名のインスタンス数をカウントし、この中間カウントを結合して最終カウントにします。この方法では、mapreduceが一意のキーを基準にして中間並べ替えを実行します。関数countMapperと関数countReducerがこのスクリプトの最後にあります。

outds = mapreduce(ds, @ countapper, @countReducer);
******************************** * MAPREDUCE的进展  * ******************************** 地图地图16%减少0% 32% 0%减少0%减少0%地图48%减少0% 65%减少0%地图地图97%减少0% 100% 81%减少0%减少0%地图100%减少10% 100%减少21%地图100%减少31% 100%减少41%地图100%减少52%减少100%62%地图100%减少72%地图100%减少83%地图100%减少93%地图100%减少100%
readall (outds)
ans =29日×2表键值  __________ _________ {' AA’}{[14930]}{”“}{[2910]}{‘公司’}{[8138]}{“DL”}{[16578]}{' EA}{[920]}{“惠普”}{[3660]}{毫升(1)的}{[69]}{“西北”}{[10349]}{的PA(1)}{[318]}{“π”}{[871]}{“PS”}{[83]}{TW的}{[3805]}{UA的}{[13286]}{‘我们’}{[13997]}{的WN} {[15931]} {AQ的}{[154]}⋮

関地图数countMapperは,データがカテゴリカルであるという事実に基づいて使用されます。関数countcatsと関数类别は入力データの各ブロックで使用され,航空会社名とそれに関連するカウントからなるキー/値のペアを生成します。

函数countMapper(数据、信息、intermKV)%统计每个区块中唯一的航空公司名称。一个= data.UniqueCarrier;c = num2cell (countcats (a));键=类别(a);addmulti (intermKV、钥匙、c)结束

减少関数countReducerは地图関数により生成された中間データを読み込み,すべてのカウントを合計して,航空会社ごとに1つの最終カウントを生成します。

函数countReducer (intermValIter,关键outKV)%合并来自所有区块的计数以产生最终计数。数= 0;hasnext(intermValIter) data = getnext(intermValIter);Count = Count + data;结束添加(outKV,钥匙,计数)结束

入力引数

すべて折りたたむ

入力データストア。数据存储オブジェクトとして指定します。関数数据存储を使用してデータセットから数据存储オブジェクトを作成します。

mapreduceは,確定的なデータストアでのみ機能します。つまり,データストアでを使用する場合は,重置によってデータストアをリセットし,もう一度データストアを読み取ります。これで,返されるデータは両方とも同じになるはずです。確定的でないデータストアについてmapreduceの計算を行うと,予期しない結果になる場合があります。詳細については,ファイル形式またはアプリケーション用のデータストアの選択を参照してください。

地图関数の関数ハンドル。mapfunは入力データストアdsからブロックを受け取り,関数添加および関数addmultiを使用してキーと値のペアを中間のKeyValueStoreオブジェクトに追加します。mapreduceが地图関数を呼び出す回数は,数据存储内のブロック数と同じです(ブロック数はデータストアのReadSizeプロパティにより決定されます)。

地图関数への入力は,数据信息およびintermKVStoreであり,mapreduceはこれらを自動的に作成して地图関数に渡します。

  • 数据および信息入力は,数据存储の関数の呼び出しの結果です。これは,地图関数の呼び出しの前に毎回mapreduceが自動的に実行します。

  • intermKVStoreは,地图関数がキーと値のペアを追加する必要のある中間KeyValueStoreオブジェクトの名前です。関地图数の呼び出しで、キーと値のペアがintermKVStoreにまったく追加されなかった場合は,mapreduceは减少関数を呼び出さず,出力データストアは空になります。

地图関数のテンプレートの例を,次に示します。

使用数据块add(intermKVStore, key, value) end进行计算

例:@myMapper

データ型:function_handle

减少関数の関数ハンドル。mapreduceは,地图関数によってそれぞれの一意のキーが中間のKeyValueStoreに追加されるたびにreducefunを呼び出します。各呼び出しで,mapreduceはアクティブなキーに関連付けられている値をValueIteratorオブジェクトとしてreducefunに渡します。関数reducefunは関数hasnextおよびgetnextを使用して,各キーの値をループします。それから,計算の実行後にキーと値のペアを最終的な出力に書き込みます。

减少関数への入力は,intermKeyintermValIterおよびoutKVStoreであり,mapreduceはこれらを自動的に作成して减少関数に渡します。

  • intermKeyは,中間のKeyValueStoreオブジェクトのアクティブなキーです。mapreduceが减少関数を呼び出すたびに,中間のKeyValueStoreオブジェクトのキーから新しい一意のキーが指定されます。

  • intermValIterは,アクティブなキーintermKeyに関連付けられたValueIteratorです。このValueIteratorオブジェクトには,アクティブなキーに関連付けられたすべての値が含まれます。関数hasnextgetnextを使用して値をスクロールします。

  • outKVStoreは,减少関数がキーと値のペアを追加しなければならない最終的なKeyValueStoreオブジェクトです。mapreduceは,outKVStore出力のキーと値のペアを取りこんで出力データストアoutdsに返します。これは,既定ではKeyValueDatastoreオブジェクトです。减少関数の呼び出しで、最終的なキーと値のペアがoutKVStoreにまったく追加されなかった場合は,出力データストアは空です。

减少関数のテンプレートの例を,次に示します。

函数myReducer(intermKey, intermValIter, outKVStore) while hasnext(intermValIter) X = getnext(intermValIter);使用当前值进行计算,添加(outKVStore, key, value) end

例:@myReducer

データ型:function_handle

実行環境。mapreduceオブジェクトとして指定します。先生は関数mapreduceの呼び出し結果です。既定の先生引数はgcmrの呼び出しであり,mapreduceの既定のグローバル実行環境を使用します(MATLABの既定値はmapreduce (0)で,SerialMapReducerオブジェクトを返します)。

メモ

この設定はmapreduceの実行環境を指定します。お使いのローカルコンピューターでmapreduceを実行する場合は必要ありません。詳細については,その他の製品を使用したMapReduceの高速化と展開を参照してください。

名前と値のペアの引数

オプションの名称,值の引数ペアをコンマ区切りで指定します。的名字は引数名で,价值は対応する値です。的名字は引用符で囲まなければなりません。Name1, Value1,…,的家のように,複数の名前と値のペアの引数を任意の順序で指定できます。

例:outds = mapreduce(ds, @mapfun, @reducefun, 'Display', 'off', 'OutputFolder', 'C:\Users\username\Desktop')

データストア出力の種類。“二元”または“TabularText”として指定します。“二元”の既定の設定では,出力フォルダーにあるバイナリ(.matまたは.seq)ファイルを指すKeyValueDatastore出力データストアを返します。“TabularText”オプションは,出力フォルダーにある. txtファイルを指すtabularTextDatastore出力データストアを返します。

次の表に,出力の各種類の詳細を示します。

“OutputType” データストア出力の種類 データストアが指すファイルの種類 减少関数で追加可能な値 减少関数で追加可能なキー 詳細
“二元”(既定) KeyValueDatastore .mat(Hadoop®に対する実行時は.seq 任意の有効なMATLABオブジェクト 文字ベクトル、字符串または,複素数、逻辑、スパース以外の数値スカラー。 N/A
“TabularText” TabularTextDatastore . txt 文字ベクトル、字符串または,複素数、逻辑、スパース以外の数値スカラー。 文字ベクトル、字符串または,複素数、逻辑、スパース以外の数値スカラー。
  • ファイルはutf - 8でエンコードされています。

  • キーと値はタブ(\ t)で区切られています。

  • 行の区切り記号は窗口®では\ r \ n, Linux®Macでは\ nです。

データ型:字符|字符串

mapreduce出力の保存先フォルダー。ファイルパスとして指定します。既定の出力フォルダーは現在のフォルダー松材线虫病です。完全修飾パスまたは現在のフォルダーに対する相対パスを使用すると,別のパスを指定できます。

例:mapreduce(…,“OutputFolder”,'MyOutputFolder\Results')は,出力の現在のフォルダーに対する相対ファイルパスを指定します。

データ型:字符|字符串

コマンドラインの進行状況出力の切り替え。“上”または“关闭”として指定します。既定値は“上”であり,mapreduceは,実行のマップとリデュースのフェーズ中の進行状況をコマンドウィンドウに表示します。

データ型:字符|字符串

出力引数

すべて折りたたむ

出力データストア。KeyValueDatastoreまたはTabularTextDatastoreオブジェクトとして返されます。既定では,outdsは,現在のフォルダーにある.matファイルを指すKeyValueDatastoreオブジェクトです。“OutputType”“OutputFolder”名称,值のペア引数を使用して,tabularTextDatastoreオブジェクトを返すか,出力ファイルの場所をそれぞれ変更します。

mapreduceoutds内のキーと値のペアを並べ替えません。mapreduceを他の製品と共に使用する場合,表示順が異なる場合があります。

outdsの内容を表示するには,数据存储の関数预览またはreadallを使用します。

ヒント

  • mapreduceアルゴリズムをデバッグする場合,キーと値のペアが異なるフェーズでどのように移動するかを確認するのは有益なことです。データの移動を確認するには,地图関数と减少関数内にブレークポイントを設定します。ブレークポイントはmapreduceの実行を停止して,KeyValueStoreまたはValueIteratorのような関連する変数の現在の状態を確認できるようにします。詳細については,MapReduceアルゴリズムのデバッグを参照してください。

  • 任意のプラットフォーム上でmapreduceのパフォーマンスを最適化するには,以下の推奨事項を実装してください。

    • 地图関数への呼び出し回数を最小限に抑えます。一番簡単な方法は,入力データストアのReadSizeプロパティの値を大きくすることです。その結果,mapreduceが地图関数に渡すデータのブロックサイズが大きくなり,データストアの最後に到達するまでの読み取り回数が少なくなります。

    • 地图関数と减少関数の間で受け渡される中間データの量を減らします。たとえば,地图関数内に独特的を使用して,類似したキーを組み合わせることができます。この手法の例は,MapReduceを使用するグループごとの平均の計算を参照してください。

拡張機能

R2014bで導入