2012-04-18 9 views
3

HDFSに異なるデータフォーマットの2つのファイルがあります。両方のデータファイルを減らす必要があった場合、どのようにジョブを設定すればいいでしょうか?複数の入力フォーマットから縮小するHadoop

1つのファイルにスペースをワールド区切り文字とし、別のファイルにアンダースコアを付けるという共通の単語数の問題を想像してください。私のアプローチでは、共通のレデューサーにフィードするよりも、さまざまなファイル形式に異なるマッパーが必要です。

どうすればよいですか? また、私よりも優れたソリューションがありますか?

答えて

4

この正確な問題を解決するクラスMultipleInputsを確認してください。それはかなり素敵です - InputFormatとオプションでMapperクラスを渡します。

Googleでコード例を検索する場合は、通常はこの方法が使用される「縮小側結合」を検索してください。


一方、時にはハックを使用する方が簡単な場合があります。たとえば、空白で区切られたファイルとアンダースコアで区切られたファイルのセットがある場合、同じマッパーとTextInputFormatの両方でロードし、両方の区切り文字でトークン化します。 2つの結果セットからトークンの数を数えます。単語カウントの例では、トークンが多いものを選択します。

これは、両方のファイルが同じ区切り文字であるが、標準列の数が異なる場合にも機能します。カンマでトークン化し、そこにいくつのトークンがあるかを見ることができます。データセットAからのトークンが5トークンであれば、データセットBからのトークンは7トークンです。

+0

ありがとう、MultipleInputsクラスは私が探していたものです!どこでその情報を見つけるのですか?私はhadoop wiki、javadoc、googleを試しました... – konstantin

+0

初めてこの特定のものを見たのはTom WhiteのHadoop:The Definitive Guideでした。 'MultipleInputs'のような豊富な宝石がありますが、それはあまりよく書かれていません。正確なクラス名を覚えていないので、実際にGoogleでこれを見つけるのは難しかった。今日はHadoopのより曖昧な地域のために、SOが最高の場所になるかもしれません。 –

関連する問題