2015-02-10 12 views
6

Sto provando a salvare un modello adattato in un file in Spark. Ho un cluster Spark che allena un modello RandomForest. Vorrei salvare e riutilizzare il modello montato su un'altra macchina. Ho letto alcuni post sul Web che consiglia di eseguire la serializzazione java. Sto facendo l'equivalente in Python ma non funziona. Qual è il trucco?Salva Apache Spark modello mllib in pitone

model = RandomForest.trainRegressor(trainingData, categoricalFeaturesInfo={}, 
            numTrees=nb_tree,featureSubsetStrategy="auto", 
            impurity='variance', maxDepth=depth) 
output = open('model.ml', 'wb') 
pickle.dump(model,output) 

sto ottenendo questo errore:

TypeError: can't pickle lock objects 

Sto usando Apache 1.2.0 Spark.

+0

Salve, sembra un modo corretto per salvare \ caricare modelli in Spark sta usando i metodi .save() e .load() per i modelli (almeno in Spark 1.3.0). Ma ho avuto problemi anche con questo approccio :(Descritto il mio problema qui [Qual è il modo giusto per salvare \ caricare i modelli in Spark \ PySpark] (http://stackoverflow.com/questions/29255145/che cosa-è-il- destra-way-to-save-load-modelli-in-spark-pyspark) – artemdevel

risposta

0

Se si guarda il codice sorgente, vedrete che i RandomForestModel eredita dalla TreeEnsembleModel che a sua volta eredita da JavaSaveable classe che implementa il metodo save(), in modo da poter salvare il modello come nell'esempio qui sotto:

model.save([spark_context], [file_path]) 

Così salverà il model nel file_path utilizzando il spark_context. Non puoi usare (almeno fino ad ora) il pickle nativo di Python per farlo. Se vuoi davvero farlo, dovrai implementare i metodi __getstate__ o __setstate__ manualmente. Vedere this pickle documentation per ulteriori informazioni.

Problemi correlati