Windows环境下PySpark保存DataFrame为Parquet文件的报错问题问询
Windows本地PySpark写入Parquet异常解决
路径已存在类异常(AnalysisException)
- 触发原因:PySpark写入默认采用
ErrorIfExists模式,未显式指定写入行为时,只要目标路径已存在有效内容,就会直接抛出“目标路径已存在”的异常,不会自动覆盖原有文件。 - 解决方法:
- 写入时显式指定写入模式,调整后代码示例:
test3.write.mode("overwrite").parquet("C:/spark/data/test4.parquet") - 可根据业务需求替换模式:选
append为向已有Parquet目录追加数据,选ignore为目标路径存在时直接跳过本次写入。
- 写入时显式指定写入模式,调整后代码示例:
原生链接缺失类异常(java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0)
- 触发原因:Windows环境下的Spark依赖Hadoop官方提供的Windows原生适配组件,缺失匹配版本的
winutils.exe、hadoop.dll文件时,JVM加载本地方法库失败,会在执行目录权限校验、文件写入流程时触发作业中断。 - 解决方法:
- 匹配当前本地Spark内置的Hadoop版本,获取同版本对应的Windows适配文件包,提取其中的
winutils.exe、hadoop.dll两个文件,禁止跨版本混用适配文件,避免方法签名不匹配的问题。 - 将两个文件存入本地固定目录,示例路径:
C:\hadoop\bin - 配置系统环境变量:
- 新增系统变量
HADOOP_HOME,取值为上述文件存放路径的上级目录,示例值:C:\hadoop - 将
%HADOOP_HOME%\bin追加到系统Path变量中
- 新增系统变量
- 完全重启当前运行PySpark的Python进程、IDE或终端,确保环境变量生效。
- 替换Linux风格的绝对路径写入写法,Windows环境下统一使用带盘符的路径格式作为写入目标,减少路径解析异常。
- 匹配当前本地Spark内置的Hadoop版本,获取同版本对应的Windows适配文件包,提取其中的
内容的提问来源于stack exchange,提问作者Bdk Kecik
相关产品推荐
相关产品推荐

