apache-spark – 使用Spark SQL将数据插入静态Hive分区

我无法弄清楚如何使用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)

(在我的情况下,当我构建数据帧时,我不包括分区列.不确定包含分区列时是否有任何错误)

点赞