Apache spark 仅覆盖已分区spark数据集中的某些分区

Apache spark 仅覆盖已分区spark数据集中的某些分区,apache-spark,hive,apache-spark-dataset,Apache Spark,Hive,Apache Spark Dataset,我们如何覆盖分区数据集,而只覆盖要更改的分区?例如,重新计算上周的每日作业,仅覆盖上周的数据 默认的Spark行为是覆盖整个表,即使只写入一些分区。由于Spark 2.3.0,这是覆盖表时的一个选项。要覆盖它,需要将新的spark.sql.sources.partitionOverwriteMode设置设置为dynamic,需要对数据集进行分区,并使用写入模式覆盖。 scala中的示例: spark.conf.set( “spark.sql.sources.partitionOverwriteM

我们如何覆盖分区数据集,而只覆盖要更改的分区?例如,重新计算上周的每日作业,仅覆盖上周的数据


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

由于Spark 2.3.0,这是覆盖表时的一个选项。要覆盖它,需要将新的
spark.sql.sources.partitionOverwriteMode
设置设置为
dynamic
,需要对数据集进行分区,并使用写入模式
覆盖
。 scala中的示例

spark.conf.set(
“spark.sql.sources.partitionOverwriteMode”“动态”
)
data.write.mode(“覆盖”).insertInto(“分区表”)
我建议在编写之前根据分区列进行重新分区,这样每个文件夹就不会有400个文件


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

仅供参考,对于PySpark用户,请确保在
插入中设置
overwrite=True
,否则模式将更改为
append

从:

以下是如何使用它:

spark.conf.set("spark.sql.sources.partitionOverwriteMode","DYNAMIC")
data.write.insertInto("partitioned_table", overwrite=True)
或者在SQL版本中工作正常

INSERT OVERWRITE TABLE [db_name.]table_name [PARTITION part_spec] select_statement

如何删除配置单元表中的多个分区?这是一个完全不同的主题,请检查此问题。我已经尝试了此解决方案,但它不允许使用诸如“”之类的运算符删除分区。嗨,我尝试了此方法,但对我无效。我必须在insertInto方法中将overwrite=True作为参数传递,但感谢您提供的线索,这会让您大吃一惊。在Spark 2.3.0之前,已经为此创建了一个JIRA。在2.3.0中,这是固定的。
INSERT OVERWRITE TABLE [db_name.]table_name [PARTITION part_spec] select_statement