我的表按顺序有4个分区:period_dt,year,month,date
我的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")