Java Generics & Hadoop: как получить переменную класса - PullRequest
1 голос
/ 21 июля 2009

Я программист .NET, занимаюсь Hadoop-работой на Java, и здесь я немного растерялся. В Hadoop я пытаюсь настроить задание Map-Reduce, в котором ключ вывода задания Map имеет тип Tuple<IntWritable,Text>. Когда я установил выходной ключ с помощью setOutputKeyclass следующим образом

JobConf conf2 = new JobConf(OutputCounter.class);
conf2.setOutputKeyClass(Tuple<IntWritable,Text>.class);

Я получаю целую кучу ошибок, потому что обобщения и нотация ".class", похоже, не летают. Следующее работает нормально, хотя

JobConf conf2 = new JobConf(OutputCounter.class);
conf2.setOutputKeyClass(IntWritable.class);

У кого-нибудь есть указания, как установить класс выходного ключа?

Ура, Юрген

1 Ответ

4 голосов
/ 21 июля 2009

В Java генерики стираются во время компиляции, поэтому лучшее, что вы можете сделать, это:

 conf2.setOutputKeyClass(Tuple.class);

Если вы можете, чтобы сделать это лучше, вы можете создать подкласс Tuple, чтобы сохранить тип во время выполнения:

 public class IntWritableTextTuple extends Tuple<IntWritable, Text> {}

А затем используйте это в качестве параметра для setOutputKeyClass.

Обратите внимание, я ничего не знаю о Hadoop, так что это может не иметь никакого смысла, но в целом с java Generics это то, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...