0

最初の map-reduce ジョブの出力から別の map-reduce ジョブの入力に複雑な値を移動する (Writable を実装する) 必要があります。ファイルに保存された最初のジョブの結果。ファイルには、テキスト データまたは BytesWritable を格納できます (デフォルトの出力\入力形式で)。したがって、Writable を Text または To BytesWritable に変換する簡単な方法が必要です。それは存在しますか?これを行う別の方法はありますか?どうもありがとう

4

1 に答える 1

0

ユーザー irW は正しいです。SequenceFileOutputFormat を使用してください。SequenceFile は、テキスト書き込み可能に変換することなく、この問題を正確に解決します。ジョブを設定するときは、job.setOutputKeyClass と job.setOutputValueClass を使用して、使用している Writable サブクラスを設定します。

job.setOutputKeyClass(MyWritable1.class);
job.setOutputValueClass(MyWritable2.class);
job.setOutputFormatClass(SequenceFileOutputFormat.class);

これにより、Hadoop SequenceFile 形式を使用して Writable が保存されます。次に、次のジョブで SequenceFileInputFormat を使用します。

job.setInputFormatClass(SequenceFileInputFormat.class);

次に、このジョブのマッパーの入力キーと値は、前のジョブで出力として最初に指定した 2 つの書き込み可能なクラスになります。

複雑な Writable サブクラスが正しく実装されていることが重要です。空のコンストラクターが必要であるという事実を超えて、クラス内のすべての Writable フィールドも情報の書き込みと読み取りを行うように、write および readFields メソッドを実装する必要があります。

于 2013-10-16T04:57:00.710 に答える