使用AWS Glue将Spark数据帧写入S3时,文件已存在错误



我正在使用此命令将数据帧写入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

我尝试了以下操作,但没有成功,最终出现了相同的错误:

  1. 在命令中添加了coalesce(100)
  2. 写入新的目的地,包括和不包括.mode("overwrite")选项
  3. 以镶木地板格式导出数据
  4. 使用.mode("append")选项写入

除了这篇文章,我找不到任何有助于解决这个问题的东西,但我使用的是Glue 3.0(Spark 3.1(,因此这不适用。

发现Glue显示的错误不是正确的异常。尽管任务阶段由于此错误而失败,但在此之前,由于代码中的异常,出现了阶段失败。

在Glue上设置Spark UI后,我找到了第一个失败的原因

以下是如何设置Spark UI

最新更新