2015-02-10 4 views
6

Я пытаюсь сделать сохранить модель в файл в Spark. У меня есть Spark-кластер, который тренирует модель RandomForest. Я хотел бы сохранить и повторно использовать установленную модель на другой машине. Я прочитал некоторые сообщения в Интернете, которые рекомендуют делать сериализацию Java. Я делаю эквивалент в python, но он не работает. Что это за трюк?Сохранить Apache Spark модель mllib в python

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

Я получаю эту ошибку:

TypeError: can't pickle lock objects 

Я использую Apache Спарк 1.2.0.

+0

Привет, выглядит как правильный способ сохранения \ загрузки моделей в Spark с использованием методов .save() и .load() для моделей (по крайней мере, в Spark 1.3.0). Но у меня также возникли проблемы с этим подходом :(Описана моя проблема здесь [Каков правильный способ сохранения \ загрузки моделей в Spark \ PySpark] (http://stackoverflow.com/questions/29255145/what-is-the- правый путь к экономии-багажные моделям-в-искрового pyspark) – artemdevel

ответ

0

Если посмотреть на исходный код, вы увидите, что RandomForestModel унаследован от TreeEnsembleModel который в свою очередь наследуется от JavaSaveable класса, который реализует метод save(), так что вы можете сохранить вашу модель, как в примере ниже:

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

Таким образом, он сохранит model в file_path, используя spark_context. Вы не можете использовать (по крайней мере до сих пор) Python nativle pickle для этого. Если вы действительно хотите это сделать, вам нужно будет вручную реализовать методы __getstate__ или __setstate__. См. this pickle documentation для получения дополнительной информации.

Смежные вопросы