1

ここで、MapReduceジョブのすべてのマッパー/リデューサーがアクセスおよび変更できるグローバルdouble変数(メンバー)を作成したいと思います。最初はメインのJavaファイルに静的なdoubleメンバーを記述しようとしましたが、各マッパー/リデューサーが別々のJVMで実行され、メンバーを変更して正しくアクセスできるため、問題があるようです。

int変数にはcounterメカニズムがあることを私は知っています。しかし、グローバルなdouble変数を作成したい場合、どうすればそれを行うことができますか?

私の最終的な目標は、すべてのマッパー/レデューサーでダブルフォーマットの何かを要約することです。グローバル変数を作成できない、または作成すべきでない場合、その目標を達成する他の方法はありますか?

4

2 に答える 2

2

これらのダブルスはどこから来たのですか?入力データにある場合は、通常の MR ジョブとして実行できます。マッパーが常に同じキーと合計される値を出力するようにします。コンバイナーを使用して、各マッパーでローカルに合計します。次に、レデューサーを 1 つだけ使用して、単純に合計を発行します。

「グローバル」状態は、まさに Map-Reduce パラダイムが回避しようとしているものです。すべてを、別々のマッパーでさまざまな部分の作業を行い、次にレデューサーで結合/集約するように考える必要があります。

于 2012-11-05T22:07:03.360 に答える
1

実際には、double を整数のように扱うことができます。任意の double に 100000 を掛けて、カウンターに格納できます。必要に応じてレデューサーで、100000 で割るだけです。

于 2013-01-29T02:38:26.130 に答える