我正在使用此命令将数据帧写入S3:
df.write.option("delimiter","|").option("header",True).option("compression", "gzip").mode("overwrite").format("csv").save("s3://bucketname/metrics/parsed/")
但我总是收到这个错误,只是文件名不断变化:
An error occurred while calling o293.save. File already exists:s3://bucketname/metrics/parsed/part-01195-6ef08750-dbf5-41c6-b024-501403820268-c000.csv.gz
完全错误:
"Failure Reason": "JobFailed(org.apache.spark.SparkException: Job aborted due to stage failure: Task 1195 in stage 11.0 failed 4 times, most recent failure:
Lost task 1195.3 in stage 11.0 (TID 3023) (172.36.67.235 executor 9):
org.apache.hadoop.fs.FileAlreadyExistsException: File already exists
我尝试了以下操作,但没有成功,最终出现了相同的错误:
- 在命令中添加了
coalesce(100)
- 写入新的目的地,包括和不包括
.mode("overwrite")
选项 - 以镶木地板格式导出数据
- 使用
.mode("append")
选项写入
除了这篇文章,我找不到任何有助于解决这个问题的东西,但我使用的是Glue 3.0(Spark 3.1(,因此这不适用。
发现Glue显示的错误不是正确的异常。尽管任务阶段由于此错误而失败,但在此之前,由于代码中的异常,出现了阶段失败。
在Glue上设置Spark UI后,我找到了第一个失败的原因
以下是如何设置Spark UI