Hadoop :Простой способ получить объект в качестве выходного значения без интерфейса с возможностью записи

Я пытаюсь использовать hadoop для обучения нескольких моделей. Мои данные достаточно малы, чтобы поместиться в памяти, поэтому я хочу, чтобы одна модель обучалась для каждой задачи карты.

Моя проблема в том, что когда я закончил обучение моей модели, мне нужно отправить ее в редьюсер. Я использую Weka для обучения модели. Я не хочу начинать искать, как реализовать интерфейс Writable в классах Weka, потому что это требует больших усилий. Я ищу простой способ сделать это.

Класс Classifier в Weka реализует интерфейс Serializable. Как я могу отправить этот объект в редуктор?

        edits

Вот ссылка, в которой упоминается сериализация объектов weka:http://weka.wikispaces.com/Serialization

Вот как выглядит мой код :Настройка задания (публикуется только часть конфигурации):

       conf.set("io.serializations","org.apache.hadoop.io.serializer.JavaSerialization," + "org.apache.hadoop.io.serializer.WritableSerialization"); 
       job.setOutputKeyClass(Text.class);
       job.setOutputValueClass(Classifier.class);

Функция карты:

     //load dataset in data variable
     Classifier tree=new J48();
     tree.buildClassifier();
     context.write(new Text("whatever"), tree);

Класс My Map расширяет Mapper (Объект, текст, текст, классификатор)

Но я получаю эту ошибку:

     java.lang.NullPointerException
at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.(MapTask.java:964)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.(MapTask.java:673)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:755)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:369)
at org.apache.hadoop.mapred.Child$4.run(Child.java:259)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:416)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
at org.apache.hadoop.mapred.Child.main(Child.java:253)

Что я делаю неправильно??

5
задан jojoba 29 March 2012 в 13:12
поделиться