多列上的 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 动态分区覆盖产生空白输出的主要内容,如果未能解决你的问题,请参考以下文章
Apache Spark 动态分区 OverWrite 问题
Spark 优化 | 图文理解 Spark 3.0 的动态分区裁剪优化