spark 3.0.1(databricks 7.3)使用模式(“overwrite”)将Dataframe写入s3 parquet:filealreadyexistsexception

jtw3ybtb  于 2021-05-26  发布在  Spark
关注(0)|答案(0)|浏览(346)

我构建了一个Dataframe,然后将其写入s3,如下所示:

df.write.mode("overwrite").option("compression", "gzip").parquet(s3_path)

大多数时候,这是可行的。大约15%的时候,我会遇到如下filealreadyexistsexception错误:

Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 17386.1 failed 4 times, most recent failure: Lost task 0.3 in stage 17386.1 (TID 447973, <redacted>, executor 341): org.apache.hadoop.fs.FileAlreadyExistsException: s3://<redacted>/part-00000-edd16bfc-efe8-41bb-9545-a828cba655a0-c000.gz.parquet already exists
    at shaded.databricks.org.apache.hadoop.fs.s3a.S3AFileSystem.create(S3AFileSystem.java:1031)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:911)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:892)
    at org.apache.parquet.hadoop.util.HadoopOutputFile.create(HadoopOutputFile.java:74)

如果我只是重新运行而不做任何更改,它通常是有效的。但在未来的尝试中,这种错误仍时有发生。我想解决这个问题。
这是在Databricks7.3上运行的。
我怀疑这个问题是由spark调用中的重试机制引起的 df.write :写入操作将部分文件上载到s3,失败并触发重试,而从早期尝试上载的文件将触发重试 FileAlreadyExistsException 在重试过程中。我怀疑 mode("overwrite") 删除/覆盖调用之前存在的冲突文件 df.write 但是在 df.write 不会被删除或覆盖,以便在重试时触发此错误。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题