Próbuję wykorzystać MOOP do trenowania wielu modeli. Moje dane są wystarczająco małe, aby zmieścić się w pamięci, więc chcę mieć jeden model przeszkolony w każdym zadaniu mapy.Hadoop: Łatwy sposób na obiekt jako wartość wyjściową bez interfejsu Zapisywalny
Mój problem polega na tym, że po ukończeniu szkolenia mojego modelu muszę wysłać go do reduktora. Używam Weka do szkolenia modelu. Nie chcę zaczynać szukać sposobu implementacji interfejsu Writable w klasach Weka, ponieważ wymaga to dużego nakładu pracy. Szukam prostego sposobu na zrobienie tego.
Klasyfikator klasy Weka implementuje interfejs Serializable. Jak mogę wysłać ten obiekt do reduktora?
edits
Oto link, który wspomina WEKA obiekty serializacji: http://weka.wikispaces.com/Serialization
Oto co mój kod wygląda następująco: Konfiguracja pracy (tylko część konfiguracji jest opublikowany):
conf.set("io.serializations","org.apache.hadoop.io.serializer.JavaSerialization," + "org.apache.hadoop.io.serializer.WritableSerialization");
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Classifier.class);
funkcja
mapa
//load dataset in data variable
Classifier tree=new J48();
tree.buildClassifier();
context.write(new Text("whatever"), tree);
Moja klasa Mapa rozciąga Mapper (obiekt, tekst, tekst, klasyfikator)
ale otrzymuję ten błąd:
java.lang.NullPointerException
at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:964)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(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)
co robię źle ??
Ohh thanks..I będzie to sprawdzić już dziś i zakładać żadnych dodatkowych pytań. – jojoba
Wprowadziłem kilka zmian, ponieważ mam problem. – jojoba
Tekst zdecydowanie nie implementuje Serializable, więc hadoop nie wie, jak sobie z tym poradzić - możesz użyć zarówno serializacji Java jak i hadoop razem - ustaw 'io.serializations' na" org.apache.hadoop.io.serializer.JavaSerialization , org.apache.hadoop.io.serializer.WritableSerialization' –