主要内容

このページ最新ではありませ。をクリックし,英语のの最新版版を参照参照し。

MapReduce

メモリにないセットを解析する手法手法

説明

淘汰= mapreduce(ds,mapfun,降低)は map 関数mapfunを入力データストアdsに適用して、それぞれの一意のキーに関連付けられている値を reduce 関数降低に渡します出力ストアは现在のフォルダーにある。垫ファイルを指すKeyValueDatastoreオブジェクトです。

淘汰= mapreduce(ds,mapfun,降低,mr)は、MapReduceの実行時コンフィギュレーション設定をオプションで指定します。mrには,关数MAPREDUCERの呼び出し结果がさされます。通常引数ははははははははははははははははMATLAB®Parallel Server™またはMATLABCompiler™と共ににれます。についてについて,,MapReduceのををののののの高速展开展开展开を参照しください。

淘汰= mapreduce(___,姓名,Value)は、前述の任意の構文を用いて、1 つ以上の姓名,Valueのペアを使用て追加オプション指定ますますたとえばたとえば,'导出目录'の后出力へのパスを文字ベクトルを指定でき。

すべて折りたたむ

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

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

ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','na',...'MissingValue',0); ds.SelectedVariableNames =“唯一载体”; ds.SelectedFormats ='%C';

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

预览(DS)
ans =8×1 tableUniqueCarrier _____________ PS PS PS PS PS PS PS PS

データでMapReduceを実行します。map 関数と reduce 関数はデータの各ブロックにある各航空会社名のインスタンス数をカウントし、この中間カウントを結合して最終カウントにします。この方法では、MapReduceが一意のキーを基準にして中間並べ替えを実行します。関数CountMapperと关数乡村がこのの最后に。。

淘汰= mapreduce(ds, @countMapper, @countReducer);
******************************** * 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 10% Map 100% Reduce 21% Map 100% Reduce 31% Map 100% Reduce 41% Map 100% Reduce 52% Map 100% Reduce 62% Map 100% Reduce 72% Map 100% Reduce 83% Map 100% Reduce 93% Map 100% Reduce 100%
readall(Outds)
ans =29×2 tableKey Value __________ _________ {'AA' } {[14930]} {'AS' } {[ 2910]} {'CO' } {[ 8138]} {'DL' } {[16578]} {'EA' } {[ 920]} {'HP' } {[ 3660]} {'ML (1)'} {[ 69]} {'NW' } {[10349]} {'PA (1)'} {[ 318]} {'PI' } {[ 871]} {'PS' } {[ 83]} {'TW' } {[ 3805]} {'UA' } {[13286]} {'US' } {[13997]} {'WN' } {[15931]} {'AQ' } {[ 154]} ⋮

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

functionCountMapper(数据,信息,InterMKV)%在每个块中计算独特的航空公司名称。a = data.UniqueCarrier; c = num2cell(countcats(a)); keys = categories(a); addmulti(intermKV, keys, c)end

reduce 関数乡村は地图关数关数生成れたデータををののをを合计してて,,航空会社会社ごとごとにににににつつつつつつの

function乡村(Key,Intermvaliter,Outkv)% Combines counts from all blocks to produce final counts.计数= 0;whilehasnext(InterMvaliter)data = getNext(InterMvaliter);count = count + data;endadd(outKV, key, count)end

入力引数

すべて折りたたむ

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

MapReduceは、確定的なデータ ストアでのみ機能します。つまり、データ ストアでreadを使用するは,重启によってデータリセット,もう一度を読み取り。これこれで,,返さ返されるれるデータデータ両方両方ももも同じ同じ同じにににMapReduceの计算と予期しないになるがます。详细详细は,ファイル形式アプリケーション用データストアの选択を参照しください。

地图关数关数关数。。mapfunは入力データストアdsからブロックを,关数addおよび关数addmultiを使用てと値ペアを中间のKeyValueStoreオブジェクトに追加ます。MapReduceが地图关数关数を呼び出すは,,数据存储内の数同じ(ブロックブロックはののの读取尺寸プロパティにより决定れます)。

地图关数への入力は、数据infoおよびintermKVStoreであり、MapReduceはこれらを自動的に作成して map 関数に渡します。

  • 数据およびinfo入力は,数据存储の関数readの呼び出し结果。これは,,,关数关数呼び出しの前毎回毎回MapReduceが自动に実行し。。

  • intermKVStore图映射关数关数キー値のペアをする必要のある中间中间KeyValueStore图。。。关数の呼び出し,と値のペアがががintermKVStoreにまったく追加れなかった,,MapReduceは降低关数关数ず,データストアはになり。。

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

函数myMapper(数据,信息,InterMKVStore)%使用数据块add(Intermkvstore,key,value)进行计算

例:@mymapper

データ::function_handle

reduce 関数の関数ハンドル。MapReduceは、map 関数によってそれぞれの一意のキーが中間のKeyValueStoreに追加されるたびに降低を呼び出し。各呼び出し,,MapReduceはアクティブなキーに関連付けられている値を价值Iteratorオブジェクトとして降低に渡します。关数降低は関数hasnextおよびgetnextを使用,キーの値をますから,,のの実行后后にキーと値値のペアペアペアをを

reduce 関数への入力は、intermKeyintermValIterおよびOUTKVSTOREであり、MapReduceはこれら的にててててててて关数に。。。。

  • intermKeyは、中間のKeyValueStoreオブジェクトのアクティブなキーです。MapReduceが降低关数关数呼び出すに,のののKeyValueStoreオブジェクトのキーから新しい一意のキーが指定されます。

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

  • OUTKVSTOREは降低关数关数キー値のペアをしなければならない最终なななKeyValueStoreオブジェクトです。MapReduceは、OUTKVSTORE出力のとのペア取りこんで出力データストア淘汰に返し。これ,既定ではKeyValueDatastoreオブジェクトですです关数呼び出し,最终なと値のががOUTKVSTOREにまったく追加れ场合は,出力ストアは空です。

减少关数の例,に。。。。

function myReducer(intermKey, intermValIter, outKVStore) while hasnext(intermValIter) X = getnext(intermValIter); %do a calculation with the current value, X end add(outKVStore, key, value) end

例:@myReducer

データ::function_handle

mapreducerオブジェクトオブジェクトオブジェクト指定ます。。mrは関数MAPREDUCERの呼び出しです。既定のmr引数はGCMRの呼び出しであり,MapReduceの既定グローバル环境を使用ます(matlabの既定ははMAPREDUCER(0)で、SerialMapReducerオブジェクトをます)。

メモ

この设定はMapReduceの実行環境を指定します。お使いのローカル コンピューターでMapReduceを実行する場合は必要ありません。詳細については、MapReduceのををののののの高速展开展开展开を参照しください。

名前とのペアの引数

オプションの姓名,Valueの引数を区切り指定します。姓名は引数名,价值は対応するです。姓名は引用でなければなりませ。。NAME1,Value1,...,Namen,Valuenのように、複数の名前と値のペアの引数を任意の順序で指定できます。

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

データストア出力种类。“二进制”または'TabularText'として指定し。“二进制”の既定の設定では、出力フォルダーにあるバイナリ (。垫または.seq)ファイルを指すKeyValueDatastore出力データを返します。'TabularText'オプションは出力フォルダーにある。文本文件ファイルを指すTabulartextdatastore出力データを返します。

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

'OutputType' データストア出力种类 データストア指すファイルの种类 reduce 関数で追加可能な値 减少关数で可能キーキー 詳細
“二进制”(既定) KeyValueDatastore 。垫(Hadoop®に対する実行时は.seq) 任意の有効な MATLAB オブジェクト 文字ベクトル,字符串,,NaN逻辑,,スパース以外の数値。。。。 N/A。
'TabularText' Tabulartextdatastore 。文本文件 文字ベクトル,字符串,,NaN逻辑,,スパース以外の数値。。。。 文字ベクトル,字符串,,NaN逻辑,,スパース以外の数値。。。。
  • ファイルutf-8でエンコードさてい。。。

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

  • 行の区切り記号は Windows®では\r\n,linux®Macでは\ nです。

データ::char|细绳

MapReduce出力の保存フォルダー。ファイル パスとして指定します。既定の出力フォルダーは現在のフォルダーPWDです。完全修飾パスまたは現在のフォルダーに対する相対パスを使用すると、別のパスを指定できます。

例:mapReduce(...,'output -folder',“ myoutputfolder \ results')は,のフォルダーに対する相対ファイルを指定します。

データ::char|细绳

コマンド ラインの進行状況出力の切り替え。'on'または'离开'として指定し。既定値は'on'であり、MapReduceは、実行のマップとリデュースのフェーズ中の進行状況をコマンド ウィンドウに表示します。

データ::char|细绳

出力引数

すべて折りたたむ

出力データ ストア。KeyValueDatastoreまたはTabulartextdatastoreオブジェクトとして返されます。既定では、淘汰は、現在のフォルダーにある。垫ファイルを指すKeyValueDatastoreオブジェクトです。'OutputType''导出目录'姓名,Valueのペア引数を使用して、Tabulartextdatastoreオブジェクトをか出力の场所を変更します。

MapReduce淘汰内のとのペア并べ替えません。MapReduceをのとににする场合,顺异なる异なるがあります。

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

ヒント

  • MapReduceをデバッグ,キーと値ペアの异なるフェーズででに移动移动移动するするするかかかかをを确认ののののはは有益有益有益有益有益有益有益ななななことことですです。。。データデータデータのの移动移动をににににににははははははははは设定し。ブレークポイントはMapReduceの実行停止して,KeyValueStoreまたは价值Iteratorのようするの现在状态をできるようします。详细については,MapReduceアルゴリズムのデバッグを参照しください。

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

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

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

拡张机能

R2014Bで导入