我已经使用朴素贝叶斯(Naive Bayes)在python中训练了一个模型,但是我无法以任何形式保存该模型。我已经在Windows上实现了我的代码。尽管https://spark.apache.org/docs/1.5.1/mllib-naive-bayes.html在此处记录了如何保存和加载模型,但是实际的save方法不接受SparkContext参数,因此我仅使用自己的路径。
有人建议可能未正确设置HADOOP_HOME,但我确保winutils.exe的版本正确,并且其位置在C:\ hadoop \ bin中。
尽管写权限已设置为默认值,但我也已将文件的权限更改为完全控制。
我尝试了此处https://machinelearningmastery.com/save-load-machine-learning-models-python-scikit-learn/中建议的解决方法,但是出现了关于pickle.load()和joblib的其他异常,我觉得自己被虫蛀了,所以我放弃了这种选择。
我已经阅读了一些有关存储模型权重的建议,但是我不了解围绕这种解决方案的工作流程。
以下行返回带有label和features列以及spark上下文的数据框。
(train_output, train_spark) = at.Algorithm.preprocess_dataframe('train')
下面,我使用pyspark.mllib.classification中的训练数据集和朴素贝叶斯(平滑= 1)来训练我的模型。
nbModel = at.execute_NB(train_output, 1)
这是我要保存模型的时候
nbModel.write().overwrite().save('Interface/model')
#attempt with same output exception
尽管目录'model'确实出现了,但异常不断出现,即: nbModel.write()。overwrite()。save(“接口/模型”) 追溯(最近一次通话):
文件“”,第1行,在 nbModel.write()。overwrite()。save(“接口/模型”)
在保存的文件“ C:... \ Anaconda3 \ lib \ site-packages \ pyspark \ ml \ util.py”中,行183 self._jwrite.save(path)
调用中的文件“ C:... i \ Anaconda3 \ lib \ site-packages \ py4j \ java_gateway.py”,行1257 答案,self.gateway_client,self.target_id,self.name)
deco中的文件“ C:... \ Anaconda3 \ lib \ site-packages \ pyspark \ sql \ utils.py”,第63行 返回f(* a,** kw)
文件“ C:... \ Anaconda3 \ lib \ site-packages \ py4j \ protocol.py”,第328行,位于get_return_value中 格式(target_id,“。”,名称),值)
Py4JJavaError:调用o6242.save时发生错误。 :org.apache.spark.SparkException:作业中止。 。 。 。 由以下原因引起:org.apache.spark.SparkException:由于阶段失败而导致作业中止:117.0阶段中的任务0失败1次,最近一次失败:117.0阶段中的任务0.0丢失(TID 105,localhost,执行器驱动程序):java.io .IOException:命令字符串中的(空)条目:空chmod 0644
我已经“ ...”提供了一些信息,因为我知道这与问题无关。 如果有人知道如何在不使用已经尝试过的解决方案的情况下将模型保存在python中,或者至少给我另一个建议,那就是如何摆脱该异常,我将永远感激不已。