如何将模型从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)
}

我已经尝试过使用,因为我希望模型最终保存到amazon s3,但它们都失败了,并显示指示找不到路径的消息。s3://some/path/$name/user/hadoop/some/path/$name

如何将模型保存到 Amazon S3?


答案 1

将模型保存到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)


答案 2

自 API 以来,您可以在不使用任何技巧的情况下保存模型。因为,ML库中的所有模型都附带一个方法,您可以在LogisticRegressionModel中检查这一点,实际上它具有该方法。顺便说一句,加载模型,您可以使用静态方法。Apache-Spark 1.6Scalasave

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

推荐