首页 > 解决方案 > 仅覆盖分区 spark 数据集中的一些分区

问题描述

我们如何覆盖分区数据集,但只覆盖我们要更改的分区?例如,重新计算上周的日常工作,并且只覆盖上周的数据。

Spark 的默认行为是覆盖整个表,即使只写入一些分区。

标签: apache-sparkhiveapache-spark-dataset

解决方案


从 Spark 2.3.0 开始,这是覆盖表时的一个选项。要覆盖它,您需要将新spark.sql.sources.partitionOverwriteMode设置设置为dynamic,数据集需要分区,以及写入模式overwritescala 中的示例:

spark.conf.set(
  "spark.sql.sources.partitionOverwriteMode", "dynamic"
)
data.write.mode("overwrite").insertInto("partitioned_table")

我建议在写入之前根据您的分区列进行重新分区,这样每个文件夹不会有 400 个文件。

在 Spark 2.3.0 之前,最好的解决方案是启动 SQL 语句来删除这些分区,然后使用附加模式写入它们。


推荐阅读