gpt4 book ai didi

types - 为什么 setMapOutputKeyClass 方法在 mapreduce 作业中是必需的

转载 作者:行者123 更新时间:2023-12-02 08:19:46 24 4
gpt4 key购买 nike

我在写mapreduce程序的时候,经常会这样写代码

 job1.setMapOutputKeyClass(Text.class); 

但为什么我们要明确指定 MapOutputKeyClass?我们已经在 mapper 类中指定了它,例如

public static class MyMapper extends
Mapper<LongWritable, Text, Text, Text>

在Hadoop:The definitive Guide一书中,有一个表格显示setMapOutputKeyClass方法是可选的(Properties for configuring types),但是我测试发现它是必需的,否则eclipse的Console会显示

Type mismatch in key from map: expected org.apache.hadoop.io.LongWritable, received org.apache.hadoop.io.Text

谁能告诉我这是什么原因?

书上说

“必须与 MapReduce 类型兼容的设置列在表 8-1 的下半部分”。这是否意味着我们必须设置低部分的属性类型,而不必设置高部分的属性类型?

表格的内容是这样的:

Properties for configuring types:
mapreduce.job.inputformat.class
mapreduce.map.output.key.class
mapreduce.map.output.value.class
mapreduce.job.output.key.class
mapreduce.job.output.value.class

Properties that must be consistent with the types:
mapreduce.job.map.class
mapreduce.job.combine.class
mapreduce.job.partitioner.class
mapreduce.job.output.key.comparator.class
mapreduce.job.output.group.comparator.class
mapreduce.job.reduce.class
mapreduce.job.outputformat.class

最佳答案

setMapOutputKeyClass()setMapOutputValueClass() 是可选的,只要它们与 setOutputKeyClass()setOutputValueClass() 分别。换句话说,如果您的 mapper 输出与您的 reducer 输出不匹配,您必须使用其中一种或两种方法。

关于您关于泛型参数的问题,由于 Java 类型删除 ( Java generics type erasure: when and what happens? ),Hadoop 在运行时不知道它们,即使编译器知道它们。

关于types - 为什么 setMapOutputKeyClass 方法在 mapreduce 作业中是必需的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38376688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com