无法使用pyspark.mllib保存朴素的贝叶斯训练模型,尽管HADOOP\u HOME设置正确

2024-09-25 00:34:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经使用naivebayes在python中训练了一个模型,但是我不能以任何形式保存该模型。我已经在windows上实现了我的代码。虽然保存和加载模型在这里有文档记录https://spark.apache.org/docs/1.5.1/mllib-naive-bayes.html,但是实际的save方法不接受SparkContext参数,所以我只使用我的路径

有些人认为HADOOP\u HOME可能设置不正确,但我确保winutils.exe的版本正确,并且它的位置在C:\HADOOP\bin中

我还将文件的权限更改为完全控制,尽管写入权限已设置为默认值

我尝试了这里建议的解决方法https://machinelearningmastery.com/save-load-machine-learning-models-python-scikit-learn/,但是出现了pickle.load()和joblib的其他异常,我感觉自己被扔进了虫洞,所以我放弃了这个替代方法

我已经阅读了一些关于存储模型权重的建议,但是我不了解这种解决方案的工作流程

下一行返回带有label和features列的dataframe,以及spark上下文

(train_output, train_spark) = at.Algorithm.preprocess_dataframe('train')

下面,我使用pyspark.mllib.classification中的训练数据集和朴素贝叶斯(smoothing=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行,在save中 self.\u jwrite.save(路径)

文件“C:…i\Anaconda3\lib\site packages\py4j\java\u gateway.py”,第1257行,在call中 应答,self.gateway\u client,self.target\u id,self.name)

文件“C:…\Anaconda3\lib\site packages\pyspark\sql\utils.py”,第63行,deco 回路f(*a,**kw)

文件“C:…\Anaconda3\lib\site packages\py4j\protocol.py”,第328行,在get\u return\u value中 格式(目标id,“.”,名称),值)

Py4JJavaError:调用o6242.save时出错。 :org.apache.spark.SparkException:作业已中止。 . . . 原因:org.apache.spark.SparkException:由于阶段失败而中止作业:阶段117.0中的任务0失败1次,最近的失败:阶段117.0中丢失任务0.0(TID 105,localhost,executor driver):java.io.IOException:(null)命令字符串中的条目:null chmod 0644

我有一些信息,因为我知道这与问题无关。 如果有人知道我如何在python中保存一个模型而不使用已经尝试过的解决方案,或者至少给我另一个建议,说明我如何摆脱这个异常,我将永远感激


Tags: 文件方法pyorg模型selfsavelib