7

我正在尝试将拟合模型保存到 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。

4

1 回答 1

2

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

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

所以它将保存modelfile_path使用spark_context. 你不能使用(至少直到现在)Python nativle pickle 来做到这一点。如果你真的想这样做,你需要实现这些方法__getstate____setstate__手动。有关更多信息,请参阅此 pickle 文档

于 2015-04-20T04:41:14.727 回答