Windows 11 64位Spark集群保存DataFrame时winutils兼容性问题求助
解决Windows 11 64位系统下winutils.exe版本不兼容导致Spark无法写入CSV的问题
问题描述
Windows 11 64位笔记本上搭建的Spark集群运行正常,但执行以下代码保存DataFrame时触发版本不兼容错误:
df.write.mode('overwrite').csv("/Users/sarve/Downloads/")
错误栈信息:
df.write.mode('overwrite').csv("/Users/sarve/Downloads/") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\SPARK\python\pyspark\sql\readwriter.py", line 1864, in csv self._jwrite.csv(path) File "C:\SPARK\python\lib\py4j-0.10.9.7-src.zip\py4j\java_gateway.py", line 1322, in __call__ File "C:\SPARK\python\pyspark\errors\exceptions\captured.py", line 179, in deco return f(*a, **kw) ^^^^^^^^^^^ File "C:\SPARK\python\lib\py4j-0.10.9.7-src.zip\py4j\protocol.py", line 326, in get_return_value py4j.protocol.Py4JJavaError: An error occurred while calling o148.csv. : java.io.IOException: Cannot run program "C:\HADOOP\bin\winutils.exe": CreateProcess error=216, This version of %1 is not compatible with the version of Windows you're running. Check your computer's system information and then contact the software publisher
解决办法
1. 替换匹配版本的winutils.exe
- 确认Spark依赖的Hadoop版本:查看Spark安装目录下
lib文件夹中hadoop-common-<版本号>.jar的版本标识(例如hadoop-common-3.3.4.jar对应Hadoop 3.3.4) - 选择对应Hadoop版本的64位winutils.exe文件(需匹配Windows 11 64位架构)
- 替换
C:\HADOOP\bin\目录下的旧winutils.exe文件
2. 检查并生效环境变量
- 确认
HADOOP_HOME环境变量指向包含bin\winutils.exe的Hadoop根目录 - 确保
%HADOOP_HOME%\bin已添加到系统PATH环境变量中 - 替换文件后重启所有运行Spark的终端或IDE,使环境变量变更生效
3. 验证替换结果
打开命令提示符,执行:
winutils.exe version
若能正常输出版本信息,说明替换成功,此时重新运行Spark写入CSV的代码即可。
内容的提问来源于stack exchange,提问作者Sarvesh Pandey
相关产品推荐
相关产品推荐

