0

我需要将复杂值(实现可写)从第一个 map-reduce 作业的输出移动到其他 map-reduce 作业的输入。第一份工作的结果保存到文件中。文件可以存储文本数据或 BytesWritable(具有默认输出\输入格式)。所以我需要一些简单的方法来将我的 Writable 转换为 Text 或 To BytesWritable 并从中转换。它存在吗?有什么替代方法可以做到这一点?非常感谢

4

1 回答 1

0

用户 irW 是正确的,使用 SequenceFileOutputFormat。SequenceFile 解决了这个确切的问题,而无需转换为 Text Writable。设置作业时,使用 job.setOutputKeyClass 和 job.setOutputValueClass 设置您正在使用的 Writable 子类:

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

这将使用 Hadoop SequenceFile 格式来存储您的 Writables。然后在你的下一份工作中,使用 SequenceFileInputFormat:

job.setInputFormatClass(SequenceFileInputFormat.class);

那么这个作业中映射器的输入键和值将是您最初在上一个作业中指定为输出的两个 Writable 类。

请注意,正确实现复杂的 Writable 子类至关重要。除了必须有一个空的构造函数之外,还必须实现 write 和 readFields 方法,以便类中的任何 Writable 字段也可以写入和读取它们的信息。

于 2013-10-16T04:57:00.710 回答