如何将模型从ML Pipeline保存到S3或HDFS?

我正在努力保存ML Pipeline生产的数千种型号。 如此答案所示,模型可以保存如下:

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因为我希望最终将模型保存到amazon s3,但它们都会失败,并显示路径不能是找到。

如何将模型保存到Amazon S3?

将模型保存到HDFS的一种方法如下:

 // persist model to HDFS sc.parallelize(Seq(model), 1).saveAsObjectFile("hdfs:///user/root/linReg.model") 

然后可以将保存的模型加载为:

 val linRegModel = sc.objectFile[LinearRegressionModel]("linReg.model").first() 

有关详细信息,请参阅( 参考 )

Apache-Spark 1.6Scala API开始,您可以在不使用任何技巧的情况下保存模型。 因为ML库中的所有模型都带有一个save方法,你可以在LogisticRegressionModel中检查它,实际上它有这个方法。 顺便加载模型,您可以使用静态方法。

 val logRegModel = LogisticRegressionModel.load("myModel.model") 

因此FileOutputStream保存到本地文件系统(而不是通过hadoop库),因此保存到本地目录是实现此目的的方法。 话虽如此,目录需要存在,因此请确保该目录首先存在。

话虽如此,根据您的模型,您可能希望查看https://spark.apache.org/docs/latest/mllib-pmml-model-export.html(pmml export)。