Spark DataFrame写入CSV文件时出现调用o58.csv的错误
报错根因排查与解决方案
你当前看到的Py4JJavaError只是Python侧捕获的上层异常,真正的任务中止原因需要查看完整Java堆栈的Caused by部分,以下是Windows环境下该类写入报错最高发的几种情况及对应解法:
- 环境依赖缺失(最高发)
Spark在Windows系统下读写本地文件依赖Hadoop的适配工具winutils,未配置对应环境会触发写入失败:- 下载和你本地Spark版本匹配的winutils.exe文件,存放至
C:\hadoop\bin目录下 - 新增系统环境变量
HADOOP_HOME,值设置为C:\hadoop - 将
%HADOOP_HOME%\bin添加到系统PATH环境变量中 - 重启IDE/命令行终端后重新运行代码
- 下载和你本地Spark版本匹配的winutils.exe文件,存放至
- 写入路径配置错误
Spark的write.csv输出对象是目录而非单个CSV文件,会自动在目录下生成多份分片数据文件:- 确认你指定的路径
C:/Users/.../spark_test不是已经存在的普通文件 - 确认当前Windows账号对该路径的上级目录拥有读写权限
- 确认你指定的路径
- 多分区写入冲突或编码问题
你可以调整写入参数降低报错概率,修改写入代码如下:
# repartition(1)将所有数据合并为1个分片输出,指定编码避免特殊字符报错 df.repartition(1).write.csv( "C:/Users/.../spark_test", mode="overwrite", sep=",", header=True, encoding="utf-8" )
- 业务逻辑数据异常
如果以上操作都无效,可以先去掉筛选、排序逻辑直接写入原始读取的spark_df,排查是否是where/sort逻辑中触发了数据类型不兼容、空值处理异常等问题。
内容的提问来源于stack exchange,提问作者tiagottmoraes
相关产品推荐
相关产品推荐

