Python 在Spark\PySpark中保存\加载模型的正确方法是什么

Python 在Spark\PySpark中保存\加载模型的正确方法是什么,python,apache-spark,pyspark,apache-spark-mllib,Python,Apache Spark,Pyspark,Apache Spark Mllib,我正在使用PySpark和MLlib使用Spark 1.3.0,我需要保存和加载我的模型。我使用这样的代码(取自官方) 尝试使用model0后,我得到了一个很长的回溯,结果如下: Py4JError: An error occurred while calling o70.predict. Trace: py4j.Py4JException: Method predict([class org.apache.spark.api.java.JavaRDD]) does not exist

我正在使用PySpark和MLlib使用Spark 1.3.0,我需要保存和加载我的模型。我使用这样的代码(取自官方)

尝试使用model0后,我得到了一个很长的回溯,结果如下:

Py4JError: An error occurred while calling o70.predict. Trace:
py4j.Py4JException: Method predict([class org.apache.spark.api.java.JavaRDD]) does not exist
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:333)
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:342)
    at py4j.Gateway.invoke(Gateway.java:252)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:207)
    at java.lang.Thread.run(Thread.java:745)
所以我的问题是——我做错什么了吗?就我调试而言,我的模型是存储的(本地和HDFS上),它们包含许多包含一些数据的文件。我感觉模型保存正确,但可能没有正确加载。我也在谷歌上搜索过,但没有发现任何相关信息

看起来Spark 1.3.0中最近添加了此保存\加载功能,因此我有另一个问题-在1.3.0版本之前,保存\加载模型的推荐方法是什么?我还没有找到任何好的方法来实现这一点,至少对于Python来说是这样。我也尝试过Pickle,但是遇到了与这里描述的相同的问题,我也遇到了这个问题——它看起来像一个bug。 我已向。

报告截至2015年3月28日(您的问题上次编辑后的一天),此问题已得到解决

您只需要从GitHub(
gitclone)克隆/获取最新版本git://github.com/apache/spark.git -b branch-1.3),然后使用
$mvn-DskipTests clean包构建它(按照
spark/README.md
中的说明)

注:我在构建Spark时遇到了麻烦,因为Maven不太可靠。我通过使用
$updatealternations--config mvn
并选择优先级为150的“路径”解决了这个问题,不管这意味着什么

保存模型的一种方法(在Scala中;但在Python中可能类似):

然后可以将保存的模型加载为:

val linRegModel = sc.objectFile[LinearRegressionModel]("linReg.model").first()
另见相关文件


有关更多详细信息,请参见()

使用ML中的管道来训练模型,然后使用MLWriter和MLReader保存模型并将其读回

from pyspark.ml import Pipeline
from pyspark.ml import PipelineModel

pipeTrain.write().overwrite().save(outpath)
model_in = PipelineModel.load(outpath)

是的,我看过这个公关,谢谢!但我还没有尝试建立自己的火花。也谢谢你给Maven的提示:)谢谢,但是这个问题很老了:)自从被问到以后,很多事情都变了。
val linRegModel = sc.objectFile[LinearRegressionModel]("linReg.model").first()
from pyspark.ml import Pipeline
from pyspark.ml import PipelineModel

pipeTrain.write().overwrite().save(outpath)
model_in = PipelineModel.load(outpath)