【问题标题】:How to save models from ML Pipeline to S3 or HDFS?如何将模型从 ML Pipeline 保存到 S3 或 HDFS?
【发布时间】:2015-11-24 08:48:23
【问题描述】:

我正在尝试保存由 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,因为我希望模型最终保存到 amazon s3,但它们都失败并显示找不到路径的消息。

如何将模型保存到 Amazon S3?

【问题讨论】:

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


    【解决方案1】:

    所以FileOutputStream 保存到本地文件系统(不是通过hadoop 库),所以保存到本地目录是执行此操作的方法。话虽如此,目录需要存在,所以先确保目录存在。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 它可以,但是当从hdfs重新加载模型时,一些信息会丢失,例如父级等......
      【解决方案3】:

      Apache-Spark 1.6Scala API 开始,您无需使用任何技巧即可保存模型。因为,ML 库中的所有模型都带有save 方法,您可以在LogisticRegressionModel 中查看它,确实有该方法。顺便说一下加载模型可以使用静态方法。

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

      【讨论】:

      • 嗨@Alberto,看API,有没有加载方法?此外,.save 不适用于其他算法,例如随机森林。在 ML 中保存模型似乎没有直接的方法。
      • 许多机器学习模型实现了其他人没有的方法。我认为 spark 2.0 版本会解决这个问题。
      • 希望,它花了这么长时间才实现这一点很奇怪。另一件事 - 我看到一些模型,例如 LogisticRegressionModel,有保存方法,但没有加载方法?您将如何加载保存的模型?
      猜你喜欢
      • 2016-10-17
      • 2017-12-27
      • 2018-02-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 2016-10-23
      相关资源
      最近更新 更多