2012-02-21 4 views
2

私はある文書内の別個の単語の総数を取得する必要がある宿題を割り当てています。Hadoopで縮小入力グループの数を取得します。

これはHadoopが提供するWordCountの例に非常に似ています。しかし、今では、ドキュメント内の別個の単語の総数を求めています。コンソール出力では、reduce入力グループの数は、別個の単語の総数に対応します。

データを減らさずにこの番号を取得する簡単な方法はありますか?または、この問題を解決する方法ではなく、Map/Reduceです。連鎖も解決策になる可能性がありますが、回答はジョブのコンソール出力で既に提供されているため、必要のないものを減らさずにreduce入力グループの数を取得する簡単な方法がないのだろうかと思います。

挨拶、 のHadoop新人

答えて

1

いくつかの時点で、一緒にデータをもたらすことなく、明瞭に確認する方法がないので、あなたは、グループにそれをしたいです。


まあ、あなたはチートをうまくいかにしているのですか?そして、不正行為によって、私は生産環境でどのようにこれをやるのかということは、それがいかに単純かという理由だけで、とにかく汚れていると感じます。

コンソール出力で、「入力グループを減らす=」を探します。これはあなたの減量兵が受け取ったグループの数を示します。 1つのグループは1つのキーにマッピングされます。つまり、各ユニークキーは1回だけ表示されます。

Reduce input groups=146030 

グループをカウントする独自のカウンタを作成できますが、その数は同じになります。

... grepまたはそのようなものを使用してそれをヤンクします。

カウンタ値を取得する場合は、ドライバのAPIを使用してジョブのステータスを照会することもできます。


、それは追加の仕事ですので、明らかに遅いあなたの他のオプション、:第一段階、単語カウントを行います。第2段階、行数をカウントする。

行カウントを行う一般的な方法は、キーと同じダミー文字列を出力し、各行に対して1を出力することです。基本的にマップ機能はcontext.write(dummyText, one)です。コンバイナを使用し、レデューサの数を1に設定してください。

+0

入力いただきありがとうございます。私は現在、「入力グループを減らす」という値を使用しています。これは 'job'インスタンスの' job.getCounters()。findCounter( "org.apache.hadoop.mapred.Task $ Counter"、 "REDUCE_INPUT_GROUPS") 'メソッドを使って見つけることができます。 Hadoop 1.0.0を使用しているIm – roelio

関連する問題