Windows环境下PySpark写入CSV时出现TASK_WRITE_FAILED错误求助
Spark DataFrame写入CSV失败的排查方案
问题重现
执行以下Spark Python代码写入CSV时报错:
output_dataframe.write.format("csv").mode("overwrite").options(header="true",sep="\t").save("file:///D:/DataCleanupTests/Badly-Structured-Sales-Data-1/output.csv")
错误信息:
24/07/06 20:34:09 ERROR FileFormatWriter: Job job_20240706203331247289827599787817_0003 aborted. 24/07/06 20:34:10 ERROR Executor: Exception in task 33.0 in stage 3.0 (TID 42)2] org.apache.spark.SparkException: [TASK_WRITE_FAILED] Task failed while writing rows to file:/D:/DataCleanupTests/Badly-Structured-Sales-Data-1/output.csv.
已确认HADOOP_HOME配置正确、winutils.exe存在,尝试过修改路径、管理员运行仍未解决。
排查与解决步骤
- 验证目标目录权限:右键目标目录→属性→安全,确认当前用户拥有写入/完全控制权限,即使管理员身份运行,目录权限也可能未正确开放。
- 移除路径特殊字符:路径中的连字符(如
Badly-Structured-Sales-Data-1)可能导致解析异常,更换为无特殊符号的路径,例如D:/DataCleanupTests/TestOutput/output.csv。 - 匹配winutils与Spark版本:winutils版本必须和Spark版本严格对应(如Spark 3.3.x对应Hadoop 3.3.x),版本不匹配会引发IO写入失败。
- 简化文件路径写法:去掉
file://前缀,直接使用本地路径格式:D:/DataCleanupTests/Badly-Structured-Sales-Data-1/output.csv,Spark在Windows环境下对file://前缀的解析偶有问题。 - 测试小批量数据:截取DataFrame的前10条数据写入测试:
排查是否因数据中存在特殊字符、超长字段导致写入失败。output_dataframe.limit(10).write.format("csv").mode("overwrite").options(header="true",sep="\t").save("D:/TestOutput/mini_output.csv") - 配置Spark Hadoop参数:初始化SparkSession时显式指定Hadoop相关配置:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("CSVWriteFix") \ .config("spark.hadoop.fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem") \ .config("spark.hadoop.home", "你的HADOOP_HOME绝对路径") \ .getOrCreate() - 指定Spark临时目录:Spark写入时依赖临时目录,若系统临时目录权限不足,手动指定有权限的临时目录:
注意提前创建spark = SparkSession.builder \ .appName("CSVWriteFix") \ .config("spark.local.dir", "D:/SparkTemp") \ .getOrCreate()D:/SparkTemp目录并赋予写入权限。
内容的提问来源于stack exchange,提问作者Russ960
相关产品推荐
相关产品推荐

