2015-08-30 11 views
13

Tôi đang cố gắng tiết kiệm hàng ngàn mô hình được sản xuất bởi ML Pipeline. Như đã nêu trong câu trả lời here, các mô hình có thể được lưu như sau:Làm thế nào để lưu mô hình từ ML Pipeline đến S3 hoặc HDFS?

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

Tôi đã cố gắng sử dụng s3://some/path/$name/user/hadoop/some/path/$name như tôi muốn các mô hình được lưu vào amazon s3 cuối cùng nhưng cả hai đều thất bại với những thông điệp cho thấy sự không thể tìm thấy đường dẫn.

Cách lưu mô hình vào S3 của Amazon?

Trả lời

0

Vì vậy, FileOutputStream lưu vào hệ thống tệp cục bộ (không phải thông qua thư viện hadoop), do đó lưu vào thư mục cục bộ là cách để thực hiện việc này. Điều đó đang được nói, thư mục cần phải tồn tại, vì vậy hãy chắc chắn rằng thư mục tồn tại trước tiên.

Điều đó đang được nói, tùy thuộc vào kiểu máy của bạn mà bạn có thể muốn xem https://spark.apache.org/docs/latest/mllib-pmml-model-export.html (xuất khẩu pmml).

9

Một cách để tiết kiệm một mô hình để HDFS là như sau:

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

mô hình đã lưu sau đó có thể được nạp như:

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

Để biết thêm chi tiết xem (ref)

+0

nó hoạt động, nhưng khi mô hình reload từ HDFS, một số thông tin sẽ bị mất, chẳng hạn như cha mẹ vv ... –

4

Kể từ Apache-Spark 1.6 và trong API Scala, bạn có thể lưu mô hình của mình mà không cần sử dụng bất kỳ thủ thuật nào. Bởi vì, tất cả các mô hình từ thư viện ML đi kèm với một phương pháp save, bạn có thể kiểm tra điều này trong LogisticRegressionModel, thực sự nó có phương pháp đó. Bằng cách tải mô hình, bạn có thể sử dụng một phương pháp tĩnh.

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

Hi @Alberto, nhìn vào API, không có phương pháp tải? Ngoài ra, .save không có sẵn cho các thuật toán khác như Random Forest. Có vẻ như không phải là một cách tiến thẳng để lưu các mô hình trong ML. – other15

+2

Nhiều người trong số các mô hình ML thực hiện những phương pháp khác mà người khác không làm. Tôi nghĩ phiên bản spark 2.0 sẽ sửa lỗi này. –

+0

Hy vọng rằng, thật kỳ lạ khi mất quá nhiều thời gian để thực hiện điều này. Một điều nữa - tôi thấy một số mô hình, chẳng hạn như LogisticRegressionModel, có phương thức lưu, nhưng không có phương thức tải? Bạn sẽ tải mô hình đã lưu của mình như thế nào? – other15

Các vấn đề liên quan