Java泛型&;Hadoop:如何获取类变量

Java泛型&;Hadoop:如何获取类变量,java,generics,hadoop,Java,Generics,Hadoop,我是一个用Java做Hadoop工作的.NET程序员,我在这里有点迷茫。在Hadoop中,我试图设置一个MapReduce作业,其中Map作业的输出键的类型为Tuple。当我使用setOutputKeyclass设置输出键时,如下所示 JobConf conf2 = new JobConf(OutputCounter.class); conf2.setOutputKeyClass(Tuple<IntWritable,Text>.class); 有人对如何设置输出键类有什么建议吗 干

我是一个用Java做Hadoop工作的.NET程序员,我在这里有点迷茫。在Hadoop中,我试图设置一个MapReduce作业,其中Map作业的输出键的类型为
Tuple
。当我使用setOutputKeyclass设置输出键时,如下所示

JobConf conf2 = new JobConf(OutputCounter.class);
conf2.setOutputKeyClass(Tuple<IntWritable,Text>.class);
有人对如何设置输出键类有什么建议吗


干杯,Jurgen

在java中,泛型会在编译时被删除,因此您最好:

 conf2.setOutputKeyClass(Tuple.class);
如果可以,为了更好地实现这一点,您可以将Tuple子类化以在运行时保留类型:

 public class IntWritableTextTuple extends Tuple<IntWritable, Text> {}
公共类IntWritableTextTuple扩展了元组{}
然后使用它作为参数来设置OutputKeyClass


请注意,我对Hadoop一无所知,因此这可能没有任何意义,但一般来说,对于java泛型,这就是您要做的。

在java中,泛型在编译时被擦除,因此您最好能做的是:

 conf2.setOutputKeyClass(Tuple.class);
如果可以,为了更好地实现这一点,您可以将Tuple子类化以在运行时保留类型:

 public class IntWritableTextTuple extends Tuple<IntWritable, Text> {}
公共类IntWritableTextTuple扩展了元组{}
然后使用它作为参数来设置OutputKeyClass


注意,我对Hadoop一无所知,所以这可能没有任何意义,但一般来说,对于java泛型,这就是你要做的。

是的,这是我能想到的最好的方法,同样。我相信扩展一个没有主体的泛型类型,就像你在
IntWritableTextTuple
中所展示的那样,只是为了绕过这些错误。我认为阻止一个模式是好的——如果你提供一个替代方案的话。这里没有其他选择,那么你还能做什么呢?是的,这也是我能想到的最好的方法。我相信扩展一个没有主体的泛型类型,就像你在
IntWritableTextTuple
中所展示的那样,只是为了绕过这些错误。我认为阻止一个模式是好的-如果你提供一个选择的话。这里别无选择,你还能做什么?