構造を持つHadoop/Mapreduceを使用して数の平均を数えています
guid banid countview
g1 b1 1
g1 b2 1
g1 b1 2
g1 b1 1
g2 b1 1
g2 b2 1
g2 b1 1
g2 b3 1
g3 b1 1
guidの各banidの平均countviewをカウントしたいですか?(私の心は、guidg1で平均=5/2です(2は別の禁止の総数です:b1、b2))
したがって、あなたが何を求めているのか理解できれば、あなたが探している答えは次のようになります。
g1 b1 1
g1 b2 1
g1 b1 2
g1 b1 1
"g1" の平均 = 5/2 (合計カウント / 一意の banid カウント)
まず、問題を Map ステージと Reduce ステージに分割する必要があります。目的は、リデューサー内の各「guid」のすべてのカウントと banid をグループ化することです。
マッパー:
出力キー/値のタイプ: テキスト / テキスト
出力キーは、おそらく GUID を含む書き込み可能なテキストになります。値には、banid とカウント (つまり、b1:1) が含まれます。これにより、すべての banid と各 GUID のカウントがグループ化されます。
レデューサー:
出力キー/値の型: Text / FloatWritable
Key 内の各 GUID の Text オブジェクトのリストを取得します。各値オブジェクトを繰り返し処理し、banid とカウントを分割します。banid のセットを作成し、反復しながらカウントを合計します。これができたら、平均を計算できるはずです。平均を FloatWritable (または Text.. はあなた次第) として書き出します。Key は reduce への入力キーと同じになります。
これは、複数の情報を含める必要がある値を処理するための簡単な方法です。より高度なアプローチは、Text および VIntWritable オブジェクトをラップする独自の Writable オブジェクトを作成することです。