¿Cómo guardar modelos de ML Pipeline a S3 o HDFS?

Estoy tratando de salvar miles de modelos producidos por ML Pipeline. Como se indica en la respuesta aquí , los modelos se pueden guardar de la siguiente manera:

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

He intentado usar s3://some/path/$name y /user/hadoop/some/path/$name ya que me gustaría que los modelos se guarden en amazon s3 con el tiempo, pero ambos fallan con mensajes que indican que la ruta no puede ser encontró.

¿Cómo guardar modelos en Amazon S3?

Una forma de guardar un modelo en HDFS es la siguiente:

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

El modelo guardado se puede cargar como sigue:

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

Para más detalles ver ( ref )

Desde Apache-Spark 1.6 y en la API de Scala , puede guardar sus modelos sin utilizar ningún truco. Como todos los modelos de la biblioteca ML vienen con un método de save , puede verificar esto en LogisticRegressionModel , de hecho tiene ese método. Por cierto para cargar el modelo puedes usar un método estático.

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

Así que FileOutputStream guarda en el sistema de archivos local (no a través de las bibliotecas de hadoop), por lo que guardarlo en un directorio local es la manera de hacerlo. Dicho esto, el directorio debe existir, así que asegúrese de que el directorio exista primero.

Dicho esto, dependiendo de su modelo, puede consultar https://spark.apache.org/docs/latest/mllib-pmml-model-export.html (pmml export).