2015-08-30 13 views
13

Sto cercando di salvare migliaia di modelli prodotti da ML Pipeline. Come indicato nella risposta here, i modelli possono essere salvati come segue:Come salvare i modelli da ML Pipeline a S3 o 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) 
} 

Ho provato con s3://some/path/$name e /user/hadoop/some/path/$name come vorrei i modelli per essere salvati su Amazon S3 alla fine ma entrambi falliscono con i messaggi che indica la percorso non può essere trovato.

Come salvare i modelli su Amazon S3?

risposta

0

Quindi il FileOutputStream salva sul filesystem locale (non attraverso le librerie hadoop), quindi salvare in una directory locale è il modo per farlo. Detto questo, la directory deve esistere, quindi assicurati che la directory esista prima.

Detto questo, a seconda del modello si potrebbe desiderare di guardare https://spark.apache.org/docs/latest/mllib-pmml-model-export.html (esportazione pmml).

9

Un modo per salvare un modello da HDFS è la seguente:

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

modello salvato può essere caricato come:

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

Per ulteriori dettagli vedere (ref)

+0

funziona, ma quando il modello ricarica da HDFS, alcune informazioni sarà perso, come genitore, ecc ... –

4

Dal Apache-Spark 1.6 e nell'API Scala, è possibile salvare i modelli senza utilizzare trucchi. Poiché tutti i modelli della libreria ML sono dotati di un metodo , è possibile verificarlo nello LogisticRegressionModel, in effetti dispone di tale metodo. Tra l'altro, per caricare il modello è possibile utilizzare un metodo statico.

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

Hi @Alberto, guardando l'API, non esiste un metodo di carico? Inoltre, .save non è disponibile per altri algoritmi come Foresta casuale. Non sembra essere un modo semplice per salvare i modelli in ML. – other15

+2

Molti dei modelli ML implementano metodi come altri. Penso che la versione spark 2.0 risolverà questo problema. –

+0

Speriamo, è strano che ci sia voluto così tanto tempo per essere implementato. Un'altra cosa: vedo alcuni modelli, come LogisticRegressionModel, hanno un metodo di salvataggio, ma nessun metodo di caricamento? Come caricheresti il ​​tuo modello salvato? – other15

Problemi correlati