Как сохранить модели от 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?
Ответы
Ответ 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
Так как Apache-Spark 1.6
и в API Scala
вы можете сохранить свои модели, не используя никаких трюков. Поскольку все модели из библиотеки ML имеют метод save
, вы можете проверить это в LogisticRegressionModel, действительно, этот метод, Кстати, для загрузки модели вы можете использовать статический метод.
val logRegModel = LogisticRegressionModel.load("myModel.model")
Ответ 3
Итак, FileOutputStream
сохраняет локальную файловую систему (не через библиотеки hadoop), поэтому сохранение в локальном каталоге - это способ сделать это. При этом каталог должен существовать, поэтому сначала убедитесь, что каталог существует.
В зависимости от вашей модели вы можете посмотреть https://spark.apache.org/docs/latest/mllib-pmml-model-export.html (экспорт pmml).