Apache spark 如何在Spark中的多级分区中覆盖特定的顶级分区

Apache spark 如何在Spark中的多级分区中覆盖特定的顶级分区,apache-spark,hive,hiveql,partition,Apache Spark,Hive,Hiveql,Partition,我的表按此顺序有4个分区:period_dt、year、month、date I period_dt是静态分区(值是一个参数),年、月、日是动态的。所以我知道我要覆盖的period_dt分区值 newInputDF.write().mode("overwrite").partitionBy("period_dt","year","month","date").parquet("trg_file_path"); 使用上面的命令Spark覆盖所有分区。但在我的例子中,如果分区存在,则覆盖它,否则追

我的表按此顺序有4个分区:period_dt、year、month、date

I period_dt是静态分区(值是一个参数),年、月、日是动态的。所以我知道我要覆盖的period_dt分区值

newInputDF.write().mode("overwrite").partitionBy("period_dt","year","month","date").parquet("trg_file_path");
使用上面的命令Spark覆盖所有分区。但在我的例子中,如果分区存在,则覆盖它,否则追加它。我想在period_dt级别覆盖分区

一种方法是提供完整的路径:

inputDFTwo.write().mode("overwrite").parquet("trg_tbl/period_dt=2016-09-21/year=2016/month=09/date=21");
但是年、月、日是动态的

second to use hive query with HiveContext.
是否有其他方法覆盖特定分区

我提出的解决方案:

hiveContext.sql("INSERT OVERWRITE TABLE table_name PARTITION(period_dt='2016-06-08', year,month,date) , select x,y,z,year,month,date from DFTmpTable");

and

DeleteHDFSfile(/table/period_dt='2016-06-08')
DF.write().mode("append").partitionBy("period_dt","year","month","date").parquet("path")

在本例中,您是如何使用配置单元查询的?你能添加配置单元查询的代码片段吗?Hi@RamPrasadG我在上面添加了解决方案。但我想知道使用上面的任何一个是否有性能差异。我最后又发布了一个查询。。。