2015-02-10 10 views
6

Ich versuche ein passendes Modell zu einer Datei in Spark speichern. Ich habe einen Spark-Cluster, der ein RandomForest-Modell trainiert. Ich möchte das angepasste Modell auf einer anderen Maschine speichern und wiederverwenden. Ich lese einige Artikel im Internet, die Java-Serialisierung empfehlen. Ich mache das Äquivalent in Python, aber es funktioniert nicht. Was ist der Trick?Speichern Apache Spark mllib Modell in Python

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

Ich erhalte diese Fehlermeldung:

TypeError: can't pickle lock objects 

Ich verwende Apache Spark 1.2.0.

+0

Hallo, sieht aus wie eine korrekte Möglichkeit zum Speichern von Modellen in Spark Spark ist mit .save() und .load() -Methoden für Modelle (zumindest in Spark 1.3.0). Aber ich habe auch Probleme mit diesem Ansatz :(Beschrieb mein Problem hier [Was ist der richtige Weg, \ Modelle in Spark \ PySpark zu speichern] (http://stackoverflow.com/questions/29255145/what-is-the- rechts-zu-speichern-laden-modelle-in-funken-pyspark) – artemdevel

Antwort

0

Wenn Sie sich den Quellcode schauen, sehen Sie, dass die RandomForestModel erbt von der TreeEnsembleModel die wiederum von JavaSaveable Klasse erbt, die die save() Methode implementiert, so dass Sie Ihr Modell wie im Beispiel unten speichern:

So wird die model in die file_path mit der spark_context speichern. Sie können (zumindest bis jetzt) ​​die Python-Nativle-Beize nicht dazu verwenden. Wenn Sie das wirklich wollen, müssen Sie die Methoden __getstate__ oder __setstate__ manuell implementieren. Weitere Informationen finden Sie unter this pickle documentation.