微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何覆盖spark scala中的特定表分区

如何解决如何覆盖spark scala中的特定表分区

我有一个按日期分区的表,我正在尝试覆盖一个特定的分区,但是 当我尝试下面的代码时,它会覆盖整个表格

query.write.partitionBy("date").mode(SaveMode.Overwrite).format("orc").insertInto(mytableName)

但我想通过提供分区列名称及其值来覆盖特定分区 喜欢partitionBy(date='20-01-2021');

有没有办法覆盖特定的分区?

解决方法

您可以指定要覆盖的分区的完整路径。在这种情况下,您不需要执行 query.write.partitionBy("date") 并且您需要在编写之前删除 date 列:

query.drop("date")
  .write
  .mode("overwrite")
  .format("orc")
  .save("/data/mytableName/date=20-01-2021")
,

尝试这种方法并适应您的具体情况:

需要在 hive 或 spark 中设置表格。

遵循这种动态方法:

spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")
import org.apache.spark.sql.types._

val df = spark.range(9).map(x => (x,(x + 100) % 3)).toDF("c1","c2")
df.repartition($"c2")
  .write
  .partitionBy("c2")
  .mode("overwrite").saveAsTable("tabX")

更新分区 - 人为,设置后以这种方式

val df2 = spark.range(1).map(x => (x,"c2")
df2.repartition($"c2")
   .write
   .mode("overwrite").insertInto("tabX")

查看效果并根据您的具体情况进行调整。

// from 9 -> 7 entries,pls run
val df3 = spark.table("tabX")
df3.show(false)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。