多列上的 Spark 动态分区覆盖产生空白输出

Posted

技术标签:

【中文标题】多列上的 Spark 动态分区覆盖产生空白输出【英文标题】:Spark Dynamic Partition overwrite on multiple columns are producing blank output 【发布时间】:2020-09-09 18:10:56 【问题描述】:

我在 HDP 2.6.5 集群上使用 spark 2.3.0 和 hadoop 2.7.5。我今天晚上遇到了一个问题。我在我的一个验证脚本中使用以下动态分区覆盖。

DF.coalesce(1).write.partitionBy("run_date","dataset_name").mode("overwrite").csv("/target/path")

但它只是用 _SUCCESS 文件写入空白输出。我在 Spark 会话中设置了以下配置。

.config("spark.sql.sources.partitionOverwriteMode","dynamic")

如果我从 .partitionBy() 中删除任何一列,这将正常工作

我想知道为什么它不将数据帧输出写入具有多列动态分区的 csv!

如果有人能帮我解决这个问题,那就太好了。

【问题讨论】:

你的意思是覆盖现有分区? @thebluephantom 不。即使我正在创建一个全新的分区,它也会写入空白输出。使用 partitionBy() 子句中的单列,动态分区覆盖按预期工作。但是对于上面的多个分区列,它只提供 _SUCCESS 文件。使用静态分区覆盖,它对多列按预期工作。同样在 HDP 3.1 集群中,这种多列动态分区覆盖的场景适用于 spark 2.3.2。问题似乎仅在 HDP 2.6.5 中 听起来像一个错误 是的。甚至我也怀疑同样的事情。幸运的是,我们已经正式迁移到 HDP 3.1。所以问题现在解决了???? 那么你应该回答并说明这是一个错误。 【参考方案1】:

这个问题似乎是 HDP 2.6.5 的一个错误,因为具有多列的动态分区覆盖的相同场景与 HDP 3.1 和 spark 2.3.2 完美配合。

【讨论】:

以上是关于多列上的 Spark 动态分区覆盖产生空白输出的主要内容,如果未能解决你的问题,请参考以下文章

在 spark Dataframe 中动态创建多列

Apache Spark 动态分区 OverWrite 问题

Spark 优化 | 图文理解 Spark 3.0 的动态分区裁剪优化

图文理解 Spark 3.0 的动态分区裁剪优化

CodeIgniter 图像水印在使用动态输出时返回空白图像

Spark 中动态分区的 LeaseExpiredException