1

マップリデュースデザインはまったく新しいです。私はバックエンドとマップリデュースエンジンとしてmongodbを使用しています。

次のような単純なデータセットの場合:

day, value

ここで、値は-1、0、または1です。各行に期間を追加します。ここで、durationは、値が1または-1に等しい連続日数です。

例の入力データセット:

       day| value
2012-01-01|  1
2012-01-02|  1
2012-01-03|  1
2012-01-04| -1
2012-01-05| -1
2012-01-06|  0
2012-01-07|  1
2012-01-08|  1

出力は次のようになります:

       day| value | Duration
2012-01-01|  1    | 0
2012-01-02|  1    | 1
2012-01-03|  1    | 2
2012-01-04| -1    | 0
2012-01-05| -1    |-1
2012-01-06|  0    | 0
2012-01-07|  1    | 0
2012-01-08|  1    | 1

これはマップリデュースジョブで実行可能ですか?

4

1 に答える 1

1

私が間違っている場合は誰かが私を修正してくれますが、これは MapReduce では実行可能ではないようです。MongoDB がマッパーへの入力の分割をどのように処理するかはわかりませんが、私の記憶が正しければ、1 つのマッパーのチャンクの外部にあるデータの事前知識に依存するタスクは、MapReduce では実行できません。

MR が特定のチャンク内でこのジョブを実行することは可能です。01/01 から 01/02 の日が 1 つのマッパーに送信されるとします (あなたの例から)。確かに、この 2 日が連続して同じ値であることを認識してもらうことができます。

しかし、別のマッパーが 01/03 から 01/04 日を取得した場合はどうなるでしょうか? このマッパーは、1 日目と 2 日目の値が 3 日目と同じであることを認識しないため、その期間が 0 であると出力するだけです。私が知る限り、別のマッパーからデータを取得する方法はありません。見ることができます。

ストレートな Java コーディングだけでこれを行う方が良いかもしれません。

于 2012-07-03T17:08:18.450 に答える