2015-08-30 13 views
13

Próbuję zapisać tysiące modeli wyprodukowanych przez ML Pipeline. Jak wskazano w odpowiedzi here, modele można zapisać następująco:Jak zapisywać modele z ML Pipeline na S3 lub 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) 
} 

Próbowałem, używając s3://some/path/$name i /user/hadoop/some/path/$name jak chciałbym modele mają być zapisywane na Amazon S3 końcu jednak oboje nie z komunikatami wskazującymi ścieżka nie może zostać znaleziona.

Jak zapisywać modele w Amazon S3?

Odpowiedz

0

Tak więc FileOutputStream zapisuje do lokalnego systemu plików (nie przez biblioteki hadoop), więc zapisanie w katalogu lokalnym jest sposobem na zrobienie tego. W związku z tym katalog musi istnieć, więc upewnij się, że katalog istnieje w pierwszej kolejności.

Biorąc to pod uwagę, w zależności od modelu, możesz spojrzeć na https://spark.apache.org/docs/latest/mllib-pmml-model-export.html (eksport pmml).

9

Jednym ze sposobów, aby zapisać model do HDFS jest następujący:

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

Zapisany model może być następnie ładowane jako:

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

Więcej szczegółów patrz (ref)

+0

to działa, ale kiedy modelka reload z HDFS, niektóre informacje zostaną utracone, takich jak rodzica itp ... –

4

Rejestracja Apache-Spark 1.6 oraz w interfejsie API Scala można zapisywać modele bez żadnych sztuczek. Ponieważ wszystkie modele z biblioteki ML pochodzą z metody save, możesz to sprawdzić w LogisticRegressionModel, w rzeczy samej ma tę metodę. Przy okazji, aby załadować model, można użyć metody statycznej.

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

Hi @Alberto, patrząc na API, nie istnieje metoda obciążenia? Ponadto .save nie jest dostępny dla innych algorytmów, takich jak Losowy las. Wydaje się, że nie ma prostego sposobu na zapisanie modeli w ML. – other15

+2

Wiele modeli ML wdraża takie metody, z których inni nie korzystają. Myślę, że wersja iskry 2.0 naprawi to. –

+0

Mam nadzieję, że to dziwne, że zajęło to tyle czasu, aby to zostało wdrożone. Kolejna rzecz - widzę niektóre modele, takie jak LogisticRegressionModel, mają metodę zapisu, ale bez metody ładowania? Jak załadowałbyś zapisany model? – other15

Powiązane problemy