我无法弄清楚如何使用Spark SQL将数据插入到Hive表的静态分区中.我可以使用这样的代码写入动态分区:
df.write.partitionBy("key").insertInto("my_table")
但是,我无法弄清楚如何将数据插入静态分区.这意味着,我想定义应该写入整个DataFrame的分区,而无需将列添加到DataFrame.
我看到了提到的静态分区
InsertIntoHiveTable级,所以我猜它是支持的.是否有公共API来做我想要的?
最佳答案 您可以使用
DataFrame tableMeta = sqlContext.sql(String.format("DESCRIBE FORMATTED %s", tableName));
String location = tableMeta.filter("result LIKE 'Location:%'").first().getString(0);
并使用正则表达式来获取表分区.获得表位置后,您可以轻松地构建分区位置
String partitionLocation = location + "/" + partitionKey
(partitionKey类似于dt = 20160329 / hr = 21)
然后,您可以写入该路径
df.write.parquet(partitionLocation)
(在我的情况下,当我构建数据帧时,我不包括分区列.不确定包含分区列时是否有任何错误)