简体   繁体   English

Spark 在 S3 中创建额外的分区列

[英]Spark creates extra partition column in S3

I am writing a dataframe to s3 as shown below.我正在将 dataframe 写入 s3,如下所示。 Target location: s3://test/folder目标位置:s3://test/folder

   val targetDf = spark.read.schema(schema).parquet(targetLocation)
    val df1=spark.sql("select * from sourceDf")
    val df2=spark.sql(select * from targetDf)
/*    
for loop over a date range to dedup and write the data to s3
union dfs and run a dedup logic, have omitted dedup code and for loop
*/
    val df3=spark.sql("select * from df1 union all select * from df2")
    df3.write.partitionBy(data_id, schedule_dt).parquet("targetLocation")

Spark is creating extra partition column on write like shown below: Spark 在写入时创建额外的分区列,如下所示:

Exception in thread "main" java.lang.AssertionError: assertion failed: Conflicting partition column names detected:

Partition column name list #0: data_id, schedule_dt
Partition column name list #1: data_id, schedule_dt, schedule_dt

EMR optimizer class is enabled while writing, I am using spark 2.4.3 Please let me know what could be causing this error.写入时启用 EMR 优化器 class,我使用的是 spark 2.4.3 请告诉我可能导致此错误的原因。

Thanks Abhineet感谢 Abhineet

You should give 1 extra column apart from partitioned columns.除了分区列之外,您应该额外提供 1 列。 Can you please try你能试试吗

val df3=df1.union(df2)

instead of代替

val df3=spark.sql("select data_id,schedule_dt from df1 union all select data_id,schedule_dt from df2")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM