Apache spark 多个列上的Spark动态分区覆盖正在生成空白输出

Apache spark 多个列上的Spark动态分区覆盖正在生成空白输出,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我在hadoop 2.7.5的HDP2.6.5集群上使用spark 2.3.0。今天晚上我遇到了一个问题。我正在我的一个验证脚本中使用下面的动态分区覆盖 DF.coalesce(1).write.partitionBy("run_date","dataset_name").mode("overwrite").csv("/target/path") 但它只是用_successfile写入空白输出。我在spark会话中

我在hadoop 2.7.5的HDP2.6.5集群上使用spark 2.3.0。今天晚上我遇到了一个问题。我正在我的一个验证脚本中使用下面的动态分区覆盖

DF.coalesce(1).write.partitionBy("run_date","dataset_name").mode("overwrite").csv("/target/path")
但它只是用_successfile写入空白输出。我在spark会话中设置了以下配置

.config("spark.sql.sources.partitionOverwriteMode","dynamic")
如果我从.partitionBy()中删除任何一列,这将很好地工作

我想知道为什么不在多列上使用动态分区将数据帧输出写入csv


如果有人能在这方面帮助我,那就太好了。

这个问题似乎是HDP 2.6.5的一个缺陷,因为相同的动态分区覆盖多个列的场景在HDP 3.1和spark 2.3.2中非常有效。

覆盖现有分区的意思是?@thebluephantom Nope。即使我正在创建一个新的分区,它也在写空白输出。对于partitionBy()子句中的单列,动态分区覆盖按预期工作。但是对于上面的多个分区列,它只提供了_成功文件。使用静态分区覆盖,它可以按预期为多个列工作。同样在HDP3.1集群中,这种多列动态分区覆盖的场景在spark 2.3.2中运行良好。这个问题似乎出现在HDP2.6.5中,只是听起来像是个错误。就连我也怀疑这一点。幸运的是,我们已经正式迁移到HDP3.1。所以这个问题现在已经解决了,那个么你们应该回答并声明它是一个bug。