PySpark训练Logistic Regression模型后无法保存的问题求助
问题描述
训练Logistic回归模型后无法保存,代码如下:
Model = LogisticRegression(featuresCol='TF-IDF', labelCol='labels', maxIter=10) lr_model = Model.fit(train_data) type(lr_model) # <class 'pyspark.ml.classification.LogisticRegressionModel'> lr_model.write().overwrite().save("MODEL_LR")
执行后触发以下错误:
{Py4JJavaError}An error occurred while calling o384.save.
ExitCodeException exitCode=-1073741515: at
org.apache.hadoop.util.Shell.runCommand(Shell.java:1007) at
org.apache.hadoop.util.Shell.run(Shell.java:900) at
org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:1212)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:1306) at
org.apache.hadoop.util.Shell.execCommand(Shell.java:1306) at
org.apache.hadoop.util.Shell.execCommand(Shell.java:1288) at
org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:978)
at
org.apache.hadoop.fs.RawLocalFileSystem.mkOneDirWithMode(RawLocalFileSystem.java:660)
at
org.apache.hadoop.fs.RawLocalFileSystem.mkdirsWithOptionalPermission(RawLocalFileSystem.java:700)
at
org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:672)
...
尝试直接调用lr_model.save("MODEL_LR")仍出现相同错误。
解决方案
1. 修复Windows环境下Hadoop依赖(针对Windows用户)
ExitCode=-1073741515是Windows系统中Hadoop缺失依赖文件的典型报错,需完成以下配置:
- 下载与你的Spark关联的Hadoop版本对应的
winutils.exe和hadoop.dll - 设置系统环境变量
HADOOP_HOME,指向包含winutils.exe的目录(比如C:\hadoop) - 将
HADOOP_HOME\bin添加到系统PATH环境变量中 - 重启PySpark运行环境,确保依赖生效
2. 调整模型保存路径
- 使用绝对路径代替相对路径,避免工作目录权限或路径解析问题:
# Windows示例 lr_model.write().overwrite().save("C:/spark_models/MODEL_LR") # 或使用file协议 lr_model.write().overwrite().save("file:///C:/spark_models/MODEL_LR") # Linux/macOS示例 lr_model.write().overwrite().save("/home/user/spark_models/MODEL_LR") - 确保目标路径所在目录的读写权限:当前运行PySpark的用户需要对目标目录有创建、写入文件的权限
3. 检查版本兼容性
确认你的PySpark版本与Hadoop版本兼容,版本不匹配可能导致文件系统操作异常。可以通过Spark官网的版本兼容矩阵核对,必要时调整Spark或Hadoop版本。
内容的提问来源于stack exchange,提问作者Mohammed Thoufeeq

