在Python中保存Apache Spark mllib模型

8

我正在尝试将Spark中的拟合模型保存到文件中。我有一个训练RandomForest模型的Spark集群。我想在另一台机器上保存和重用拟合模型。我阅读了一些网络帖子,建议进行Java序列化。我正在使用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 Spark 1.2.0。


嗨,看起来在Spark中保存/加载模型的正确方法是使用.save()和.load()方法(至少在Spark 1.3.0中)。但我也遇到了这种方法的问题:( 在这里描述了我的问题什么是在Spark / PySpark中保存/加载模型的正确方法 - artemdevel
1个回答

3

如果你查看源代码,你会发现RandomForestModel继承自TreeEnsembleModel,后者又继承自实现了save()方法的JavaSaveable类,因此你可以像下面的示例一样保存你的模型:

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

所以,它将使用spark_contextmodel保存到file_path中。你不能使用Python的本地pickle来完成这个任务(至少目前不能)。如果你真的想这样做,你需要手动实现__getstate____setstate__方法。有关更多信息,请参见此pickle文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接