在python中保存Apache Spark mllib模型

poi*_*rez 6 python pyspark apache-spark-mllib

我正在尝试将拟合的模型保存到Spark中的文件中.我有一个Spark集群,它训练一个RandomForest模型.我想在另一台机器上保存并重复使用合适的模型.我在网上看了一些建议做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)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

TypeError: can't pickle lock objects
Run Code Online (Sandbox Code Playgroud)

我正在使用Apache Spark 1.2.0.

Tar*_*ula 3

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

model.save([spark_context], [file_path])
Run Code Online (Sandbox Code Playgroud)

所以它会将 保存到使用model中。您不能使用(至少到目前为止)Python 原生 pickle 来执行此操作。如果您确实想这样做,则需要实现这些方法或手动实现。请参阅此 pickle 文档以获取更多信息。file_pathspark_context__getstate____setstate__