5
我試圖利用hadoop來訓練多個模型。我的數據足夠小以適應內存,所以我想在每個地圖任務中都有一個模型受過訓練。Hadoop:將對象作爲輸出值的簡單方法,無需可寫接口
我的問題是,當我完成了我的模型訓練後,我需要將它發送到減速器。我正在使用Weka來訓練模型。我不想開始尋找如何在Weka類中實現Writable接口,因爲它需要很多努力。我正在尋找一個簡單的方法來做到這一點。
Weka中的Classifier類實現了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);
我的地圖類擴展映射器(對象,文本,文本,分類)
但我得到這個錯誤:
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)
我在做什麼錯?
喔thanks..I將於今天檢查出來,併發布任何進一步的問題。 – jojoba 2012-03-29 01:44:34
我做了一些編輯,因爲我有一個問題。 – jojoba 2012-03-29 12:32:25
文本絕對不會實現Serializable,因此hadoop不知道如何處理這種類型 - 您可以同時使用Java和hadoop序列化 - 將'io.serializations'設置爲'org.apache.hadoop.io.serializer.JavaSerialization ,org.apache.hadoop.io.serializer.WritableSerialization' – 2012-03-29 13:18:30