Java Mapper&;中的不同键;组合器
在Map Reduce中,可以在映射器、组合器和还原器之间传播不同类型的键 例如,如果我有一个映射器(用Java实现),它输出文本,可作为键/值对写入。 然后,在combiner中,我将所有输出合并为单个键,并希望将其输出为可空写的文本。 然后在Reducer中,我想输出文本,intwriteableJava Mapper&;中的不同键;组合器,java,hadoop,Java,Hadoop,在Map Reduce中,可以在映射器、组合器和还原器之间传播不同类型的键 例如,如果我有一个映射器(用Java实现),它输出文本,可作为键/值对写入。 然后,在combiner中,我将所有输出合并为单个键,并希望将其输出为可空写的文本。 然后在Reducer中,我想输出文本,intwriteable 有可能像上面那样做吗?若否,原因为何 您可以使用以下方法为mapper和reducer指定不同的键/值类型: job.setMapOutputKeyClass(Text.class); job.s
有可能像上面那样做吗?若否,原因为何 您可以使用以下方法为mapper和reducer指定不同的键/值类型:
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
及
但不能为组合器设置不同于映射器的键/值类型。这是因为组合器仅用于减少从映射器发送到reducer的数据量。您应该能够在没有任何副作用的情况下移除组合器。但是,如果组合器生成
NullWritable,Text
对,而映射器生成Text,IntWritable
对,则没有组合器,程序将失败。您可以使用Text而不是IntWritable:
- 映射器输出:文本,文本
- 组合器:文本,文本。可以使用组合器输出键nullwriteable
- 减速机输入:文本,文本
关于这一点的讨论,我建议阅读的第3章。在PDF文件的第48页中,对该问题进行了评论。基本上,你是说所有映射器、组合器和还原器都应该具有相同的输入/输出键/值类型吗?否=)我只是试图解释为什么映射器和组合器的不同输出键/值类型没有意义。您的程序不应取决于合路器是否启用。合并器仅用于减少将从映射器传输到还原器的数据量,它们不应包含任何其他逻辑,因此您应该能够删除合并器而不会产生任何副作用。
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);