3

在我的一个 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))

但我不知道如何使用这个 Reader 将键和值作为参数传递给 Mapper 类。如何将 conf.setInputFormat 设置为 SequenceFileInputFormat,然后让 Mapper 获取键和值?

谢谢

4

1 回答 1

8

您不需要手动读取序列文件。只需将输入格式类设置为序列文件:

job.setInputFormatClass(SequenceFileInputFormat.class);

并将输入路径设置为包含您的序列文件的目录。

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

您需要注意 Mapper 类的参数化类型的输入的 (Key,Value) 类型,以匹配序列文件中的 (key,value) 元组。

于 2013-03-02T23:14:55.330 回答