2017-01-27 11 views
1

file1.txtとfile2.txtという2つのファイルがありますが、そこにいくつかのレコードがあります。どちらのファイルも同じスキーマを持ちます。 1つのMapperクラスを使用しています。 mapperクラスで読み込まれたタプルがfile1またはfile2から来たかどうかを知りたい1マッパークラスの複数の入力ファイル - Hadoop

+0

[Hadoopプログラムのマッパーで入力ファイル名を取得するにはどうすればいいですか?](http://stackoverflow.com/questions/19012482/how-to-get-the-input-file-name-ハープ・イン・ア・ハープ・プログラム) –

答えて

0

どの入力ファイルからデータが来るのかを特定するには、runメソッドとrecordreaderクラスメソッドをオーバーライドする必要があります。それは少し複雑ですが、私はあなたの代わりにそれを提案します。

これらの両方のファイルを読み込む複数のマッパーを作成し、各マッパーで出力にトークンを追加することができます。マッパーに基づいて結果を識別するのに役立ちます。ドライバクラスでは、複数の入力クラスを使用する必要があります。詳細については、 (https://hadoop.apache.org/docs/r2.6.3/api/org/apache/hadoop/mapreduce/lib/input/MultipleInputs.html)のリンクをご覧ください。

jarファイルを実行するときは、入力データを読み込みたい入力ファイルのパスと、出力を保存するパスのパスを指定します。

は、私は、これはあなたのクエリの解決を願って、より詳細http://dailyhadoopsoup.blogspot.in/2014/01/mutiple-input-files-in-mapreduce-easy.html?m=1

についてはこちらを参照してください。

0

あなたはこれを試すことができます: -

我々は、単一のマッパーに複数のファイルを取得している場合には、ファイル名の情報を得るために、マップ内のロジックを記述します。

マッパーが単一のファイルしか取得していない場合、セットアップ方法でこれを書き込むことができます。これにより、I/O操作が節約され、1回だけフェッチされます。この後

String filename = new String; public void map(LongWritable key, Text values,Context context) { FileSplit fsFileSplit = (FileSplit) context.getInputSplit(); filename = context.getConfiguration().get(fsFileSplit.getPath().getParent().getName())); }

あなたはまた、ファイル名に基づいて(行が読み込ま)の結果を分離するロジックを記述することができます。

関連する問題