我正在努力保存ML Pipeline生产的数千种型号。如答案here所示,模型可以保存如下:
import java.io._
def saveModel(name: String, model: PipelineModel) = {
val oos = new ObjectOutputStream(new FileOutputStream(s"/some/path/$name"))
oos.writeObject(model)
oos.close
}
schools.zip(bySchoolArrayModels).foreach{
case (name, model) => saveModel(name, Model)
}
我尝试使用s3://some/path/$name
和/user/hadoop/some/path/$name
,因为我希望模型最终保存到亚马逊s3,但它们都会失败并显示无法找到路径的消息。
如何将模型保存到Amazon S3?
答案 0 :(得分:10)
将模型保存到HDFS的一种方法如下:
// persist model to HDFS
sc.parallelize(Seq(model), 1).saveAsObjectFile("hdfs:///user/root/linReg.model")
然后可以将已保存的模型加载为:
val linRegModel = sc.objectFile[LinearRegressionModel]("linReg.model").first()
有关详细信息,请参阅(ref)
答案 1 :(得分:4)
自Apache-Spark 1.6
以及Scala
API中,您可以在不使用任何技巧的情况下保存模型。因为ML库中的所有模型都带有save
方法,您可以在LogisticRegressionModel中查看,确实它有这种方法。顺便加载模型,您可以使用静态方法。
val logRegModel = LogisticRegressionModel.load("myModel.model")
答案 2 :(得分:1)
因此FileOutputStream
保存到本地文件系统(而不是通过hadoop库),因此保存到本地目录是实现此目的的方法。话虽这么说,目录需要存在,所以要确保目录首先存在。
话虽如此,根据您的模型,您可能希望查看https://spark.apache.org/docs/latest/mllib-pmml-model-export.html(pmml export)。