Sto cercando di sfruttare hadoop per addestrare più modelli. I miei dati sono abbastanza piccoli da stare nella memoria, quindi voglio avere un modello addestrato in tutte le attività della mappa.Hadoop: modo semplice di avere un oggetto come valore di output senza interfaccia scrivibile
Il mio problema è che quando ho finito di allenare il mio modello, ho bisogno di inviarlo al riduttore. Sto usando Weka per addestrare il modello. Non voglio iniziare a cercare come implementare l'interfaccia Writable nelle classi di Weka, perché richiede un grande sforzo. Sto cercando un modo semplice per farlo.
La classe Classifier in Weka implementa l'interfaccia Serializable. Come posso inviare questo oggetto al riduttore?
edits
Ecco il link che cita gli oggetti weka serializzazione: http://weka.wikispaces.com/Serialization
Ecco ciò che il mio codice è simile: Configurazione del lavoro (solo una parte della configurazione è pubblicato):
conf.set("io.serializations","org.apache.hadoop.io.serializer.JavaSerialization," + "org.apache.hadoop.io.serializer.WritableSerialization");
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Classifier.class);
funzione
Mappa:
//load dataset in data variable
Classifier tree=new J48();
tree.buildClassifier();
context.write(new Text("whatever"), tree);
La mia classe Map estende Mapper (Oggetto, Testo, Testo, classificatore)
Ma sto ottenendo questo errore:
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)
quello che sto facendo di sbagliato ??
Ohh thanks..I controllerà fuori oggi e inviare ulteriori domande. – jojoba
Ho apportato alcune modifiche poiché ho un problema. – jojoba
Il testo sicuramente non implementa Serializable così hadoop non sa come gestire questo tipo - puoi usare sia la serializzazione Java che quella hadoop - imposta 'io.serializations' su' org.apache.hadoop.io.serializer.JavaSerialization , org.apache.hadoop.io.serializer.WritableSerialization' –