web-dev-qa-db-ja.com

モデルをMLパイプラインからS3またはHDFSに保存する方法は?

MLPipelineによって作成された何千ものモデルを保存しようとしています。回答に示されているように ここ 、モデルは次のように保存できます。

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)
}

モデルを最終的にAmazons3に保存したいので、s3://some/path/$name/user/hadoop/some/path/$nameを使用しようとしましたが、どちらもパスが見つからないことを示すメッセージで失敗します。

モデルをAmazonS3に保存する方法は?

15
SH Y.

モデルをHDFSに保存する1つの方法は、次のとおりです。

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

保存されたモデルは、次のようにロードできます。

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

詳細については、( ref )を参照してください。

10
Neil

Apache-Spark 1.6およびScala AP​​Iでは、トリックを使用せずにモデルを保存できます。 MLライブラリのすべてのモデルにはsaveメソッドが付属しているため、これは LogisticRegressionModel で確認できます。実際、このメソッドがあります。ちなみに、モデルをロードするには、静的メソッドを使用できます。

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

したがって、FileOutputStreamは(hadoopライブラリを介さずに)ローカルファイルシステムに保存するため、ローカルディレクトリに保存することがこれを行う方法です。そうは言っても、ディレクトリが存在する必要があるので、最初にディレクトリが存在することを確認してください。

そうは言っても、モデルによっては、 https://spark.Apache.org/docs/latest/mllib-pmml-model-export.html (pmml export)を確認することをお勧めします。

1
Holden