Amazon web services 在写入s3时重复分区列

Amazon web services 在写入s3时重复分区列,amazon-web-services,apache-spark,amazon-s3,amazon-emr,Amazon Web Services,Apache Spark,Amazon S3,Amazon Emr,我正在处理数据并使用以下代码将其写入s3: spark=SparkSession.builder.config('spark.sql.sources.partitionOverwriteMode','dynamic').getOrCreate() df=spark.read.parquet('s3://')).filter(F.col('processing_hr')=) 已转换的\u df=进行大量的\u转换(df) #这是我如何写出来的重要一点 已转换的_df.write.mode('ove

我正在处理数据并使用以下代码将其写入s3:

spark=SparkSession.builder.config('spark.sql.sources.partitionOverwriteMode','dynamic').getOrCreate()
df=spark.read.parquet('s3://')).filter(F.col('processing_hr')=)
已转换的\u df=进行大量的\u转换(df)
#这是我如何写出来的重要一点
已转换的_df.write.mode('overwrite').partitionBy('processing_hr').parquet('s3://bucket\u name/location'))
基本上,我试图用数据帧中的内容覆盖分区,但将先前处理的分区保留在s3中

这种写入操作会继续发生,但会随机失败,并且具有一定的一致性。默写失败。当我从's3://bucket\u name/location'读回数据时,我得到以下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o85.parquet.
: java.lang.AssertionError: assertion failed: Conflicting partition column names detected:

    Partition column name list #0: processing_hr, processing_hr
    Partition column name list #1: processing_hr

For partitioned table directories, data files should only live in leaf directories.
And directories at the same level should have the same partition column name.
Please check the following directories for unexpected files or inconsistent partition column names:

    s3://bucket_name/location/processing_hr=2019-09-19 13%3A00%3A00
    s3://bucket_name/location/processing_hr=2019-09-19 20%3A00%3A00
    s3://bucket_name/location/processing_hr=2019-09-19 12%3A00%3A00/processing_hr=2019-09-19 12%3A00%3A00
我有点困惑这怎么会发生。如何防止spark复制分区列


我试着四处查看文档,spark jira,但似乎仍然找不到任何与此相关的内容。

这似乎是由于S3最终的不一致性问题。如果使用EMR<5.30,则使用EMRFS一致视图。或者升级到EMR 5.30,最新的EMRFS似乎已经解决了这个问题

在任何分区的第二次运行中都会发生这种情况吗?我也看到了这种行为。不确定是spark还是S3/EMRFS。还不确定启用EMRFS一致性视图是否能解决此问题。有什么想法吗?该问题间歇性出现。有任何更新/解决方案吗?即使我也面临同样的问题。现在有任何解决方案吗?您是否可以共享任何文档或信息,说明此问题已在EMR 5.30版本中修复