Python 在Spark\PySpark中保存\加载模型的正确方法是什么
我正在使用PySpark和MLlib使用Spark 1.3.0,我需要保存和加载我的模型。我使用这样的代码(取自官方) 尝试使用model0后,我得到了一个很长的回溯,结果如下: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
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)