3

私の1つのMapReduceタスクでは、BytesWritableをKeyBytesWritableとしてオーバーライドし、ByteWritableをValueBytesWritableとしてオーバーライドします。次に、SequenceFileOutputFormatを使用して結果を出力します。

私の質問は、次のMapReduceタスクを開始するときに、このSequenceFileを入力ファイルとして使用したいということです。では、どのようにジョブクラスを設定でき、Mapperクラスは以前にオーバーライドしたSequenceFileのキーと値をどのように識別できるのでしょうか。

SequenceFile.Readerでキーと値を読み取ることができることを理解しています。

Configuration config = new Configuration();
Path path = new Path(PATH_TO_YOUR_FILE);
SequenceFile.Reader reader = new SequenceFile.Reader(FileSystem.get(config), path, config);
WritableComparable key = (WritableComparable) reader.getKeyClass().newInstance();
Writable value = (Writable) reader.getValueClass().newInstance();
while (reader.next(key, value))

しかし、このリーダーを使用して、キーと値をパラメーターとしてMapperクラスに渡す方法がわかりません。conf.setInputFormatをSequenceFileInputFormatに設定してから、Mapperにキーと値を取得させるにはどうすればよいですか?

ありがとう

4

1 に答える 1

8

シーケンスファイルを手動で読み取る必要はありません。入力フォーマットクラスをシーケンスファイルに設定するだけです。

job.setInputFormatClass(SequenceFileInputFormat.class);

入力パスをyorシーケンスファイルを含むディレクトリに設定します。

FileInputFormat.setInputPaths(<path to the dir containing your sequence files>);

シーケンスファイル内の(key、value)タプルと一致するように、Mapperクラスのパラメーター化されたタイプの入力の(Key、Value)タイプに注意を払う必要があります。

于 2013-03-02T23:14:55.330 に答える