将mllib决策树模型保存到hdfs

时间:2015-11-03 16:53:30

标签: scala apache-spark apache-spark-mllib

我有一套针对一组数据训练的Mllib决策树模型。我希望能够在必要时保存并加载训练有素的模型。假设我在百万行数据集上进行训练并保存以备将来使用。我发现使用FileInputStream,FileOutputStream,ObjectInputStream,ObjectOutputStream我可以保存并加载一个Linear模型,因为它们将这些构造函数设为公共,如下所示。

您可以将模型保存到磁盘,如下所示:

import java.io.FileOutputStream 
import java.io.ObjectOutputStream 
val fos = new FileOutputStream("e:/model.obj") 
val oos = new ObjectOutputStream(fos)   
oos.writeObject(model)   
oos.close

并将其加载到:

import java.io.FileInputStream 
import java.io.ObjectInputStream 
val fos = new FileInputStream("e:/model.obj") 
val oos = new ObjectInputStream(fos) 
val newModel = oos.readObject().asInstanceOf[org.apache.spark.mllib.classification.LogisticRegressionModel]

上面的语法也适用于DecisionTree,但我无法调用newModel.predict(),因为决策树构造函数显然没有公开。

现在有人可以保存和加载DecisionTree,RandomForest,SVM等模型吗?

1 个答案:

答案 0 :(得分:1)

您可以使用模型上的.save方法将其存储为镶木地板文件,并通过.load在随播对象上加载。将其保存为镶木地板文件,这应该比使用普通的java序列化更快,这通常很慢。

请参阅https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.mllib.util.Saveable