Windows10环境PySpark写DataFrame到CSV报ExitCode=-1073741515错误求助
问题根因定位
错误码-1073741515是Windows平台下程序启动缺少依赖的典型报错,从调用栈可以看出故障发生在Hadoop本地文件系统执行目录权限设置阶段,Spark本身的计算逻辑(读数据、数据转换)不受影响,只有写入操作触发Hadoop Shell调用时才会报错。
可行解决方案
- 匹配对应版本的依赖文件:你使用的
winutils.exe、hadoop.dll必须和Spark预编译绑定的Hadoop版本完全一致,比如Spark3.x如果是基于Hadoop3.2预编译的版本,必须下载对应Hadoop3.2的64位依赖文件,放置到%HADOOP_HOME%\bin目录下,禁止跨大版本混用依赖。 - 安装对应架构的C++运行库:你之前仅安装了x86版本的运行库,Windows 10 64位系统下还需要安装Microsoft Visual C++ Redistributable (x64),优先安装2015-2022合集版本,避免
winutils.exe运行时缺少系统依赖。 - 禁用Hadoop权限校验(本地开发优先级最高的方案):直接在SparkSession初始化阶段添加配置,绕开权限调用逻辑,从根源避免触发Shell执行权限设置的操作,配置参考如下:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("local_write_test") \ .config("spark.hadoop.fs.permissions.enabled", "false") \ .config("spark.hadoop.dfs.permissions.enabled", "false") \ .getOrCreate()
- 使用全英文无空格绝对路径写入:避免使用相对路径、带中文/空格的路径,写入路径格式参考
df.write.csv("E:/test_output/mypath"),统一使用正斜杠或者双反斜杠作为路径分隔符。 - 替换文件提交协议:写入前添加Spark配置,更换不需要额外权限操作的文件提交协议:
.config("spark.sql.sources.commitProtocolClass", "org.apache.spark.sql.execution.datasources.SQLHadoopMapReduceCommitProtocol")
验证方法
修改配置后运行你提供的复现代码,若指定写入目录下生成part-0000x-xxx.csv格式的实际数据文件,即为修复成功。
内容的提问来源于stack exchange,提问作者palamuGuy
相关产品推荐
相关产品推荐

