Map()およびreduce()は、同じタイプのキー/値のペアを返す必要がありますか?
質問
MapReduceのジョブを書くとき(特に関連する場合はHadoop)、 map()
そしてa reduce()
関数、両方ともキー/値のペアのシーケンスを生成します。キーと値のデータ型は、アプリケーションによって自由に定義できます。
単語カウントの標準的な例では、両方の関数がタイプのペアを生成します (string, int)
キーは単語であり、値は発生のカウントです。ここで - 私が見た他のすべての例と同様に、出力されたキーと値のタイプは、2つの関数間で一貫しています。
キー/バリューペアのタイプが得られる必要があります map()
と reduce()
MapReduceのアプリケーション内で同じですか?はいの場合:なぜですか?
解決
いいえ。もちろん、もちろん、マップの出力ペアのタイプと減少の入力ペアは同一でなければなりません。一方は他方に渡されているからです。
ただし、マップタスクがドキュメント内の単語をカウントしたが、削減されたタスクが平均単語周波数を計算した場合、たとえば、マップペアとは異なるタイプを出力する削減タスクがある可能性があります。その場合、マップは整数を放出しますが、減少すると浮動小数点数が発生します。
他のヒント
出力をマップして削減することは異なる場合があります。しかし、あなたは彼らがそうであることをアプリケーションに伝える必要があります。方法は次のとおりです。
SetOutputKeyclass()およびSetOutUptValueClass()メソッドは、マップと削減機能の出力タイプを制御しますが、これはしばしば同じです。
それらが異なる場合、それぞれsetMapOutputKeyclass()とsetMapOutputValueによってマップ出力キー/値タイプを設定できます。