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

时间:2016-09-28 17:20:44

标签: apache-spark hive hiveql partition

我的表按顺序有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")

0 个答案:

没有答案