HDFS に異なるデータ形式の 2 つのファイルがあります。両方のデータ ファイルを削減する必要がある場合、ジョブの設定はどのようになりますか?
たとえば、あるファイルではワールド区切り文字としてスペースがあり、別のファイルではアンダースコアがあるという一般的な単語数の問題を想像してみてください。私のアプローチでは、さまざまなファイル形式に対して異なるマッパーが必要であり、それは共通のレデューサーにフィードされます。
どうやってするか?または、私よりも良い解決策はありますか?
MultipleInputs
この正確な問題を解決するクラスをチェックしてください。InputFormat
それはかなりきれいです-あなたはクラスとオプションでクラスを渡しますMapper
。
Google でコード例を探している場合は、このメソッドが通常使用される「Reduce-side join」を検索してください。
一方で、ハックを使用する方が簡単な場合もあります。たとえば、スペースで区切られたファイル セットとアンダースコアで区切られたファイル セットがある場合、両方を同じマッパーでロードし、TextInputFormat
両方の可能な区切り文字でトークン化します。2 つの結果セットからトークンの数を数えます。単語数の例では、トークンが多いものを選択します。
これは、両方のファイルが同じ区切り文字であるが、標準列の数が異なる場合にも機能します。コンマでトークン化して、トークンの数を確認できます。たとえば、5 トークンの場合はデータ セット A からのものであり、7 トークンの場合はデータ セット B からのものです。