Сохранить модель мллиб Apache Spark в python

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

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 Spark 1.2.0.


person poiuytrez    schedule 10.02.2015    source источник
comment
Привет, похоже, что правильным способом сохранения\загрузки моделей в Spark является использование методов .save() и .load() для моделей (по крайней мере, в Spark 1.3.0). Но у меня также есть проблемы с этим подходом :( Описал мою проблему здесь Как правильно сохранять\загружать модели в Spark\PySpark   -  person artemdevel    schedule 25.03.2015


Ответы (1)


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

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

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

person Tarantula    schedule 20.04.2015