2016-10-24 7 views
3

私はの2つのマッパーと2つのレデューサーを使用しています。最初の減速が<Text, IntWritable>を書き込み、私は読んで私の第二マッパーは、<Text,IntWritable>を取得しますがされているのでhadoopのマッパーを設定して<Text、IntWritable>にする方法

java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text

これは、マッパーはデフォルトで<LongWritable, Text>を取る:私は次のエラーを取得しています。

だから、私のようなもので、入力フォーマットを設定する必要があります。

job2.setInputFormatClass(MyInputFormat.class); 

<Text,IntWritable>を受け取るためのInputFormatクラスを設定する方法はありますか?

答えて

2

マッパーの入力タイプは、あなたが思うようにInputFormatによって設定されます。

一般に、このようなジョブを連鎖させるときは、SequenceFileOutputFormatと次のジョブSequenceFileInputFormatを使用するのが最善です。このようにタイプが処理され、タイプが同じになるように設定されます。つまり、マッパーの入力は前の減速機の出力と同じです。

+1

私たちは事実上、質問の1.5時間後に同じ答えを投稿しました。 – vefthym

+0

お返事ありがとうございます。しかし、私は入力と出力のフォーマットクラスをSequenceFileInputFormatとSequenceFileOutputFormatに変更したとはいえ、それでもエラーをスローします。 私は[新しい回答]を求めました(http://stackoverflow.com/questions/40221115/how-to-set-aa-reducer-to-emmit-text-intwritable-and-a-mapper-to-receive私はいくつかのコードを関与させたいので、この答えは完全に返答されたと思います。 – Hernan

2

独自の入力形式は必要ありません。最初のジョブにはSequenceFileOutputFormatを設定し、2番目のジョブにはSequenceFileInputFormatを設定するだけです。

TextInputFormatはLongWritableキーとText値を使用しますが、SequenceFileInputFormatは出力の保存に使用したタイプを使用します。

関連する問題