我无法弄清楚如何使用 Spark SQL 将数据插入到 Hive 表的静态分区中。我可以使用这样的代码写入动态分区:
df.write.partitionBy("key").insertInto("my_table")
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何将数据插入到静态分区中。这意味着,我想定义应该写入整个 DataFrame 的分区,而无需将列添加到 DataFrame。
我在InsertIntoHiveTable类中看到了静态分区 ,所以我想它是受支持的。是否有公共 API 来做我想做的事?
小智 1
您可以使用
DataFrame tableMeta = sqlContext.sql(String.format("DESCRIBE FORMATTED %s", tableName));
String location = tableMeta.filter("result LIKE 'Location:%'").first().getString(0);
Run Code Online (Sandbox Code Playgroud)
并使用正则表达式来获取表分区。一旦获得表位置,您就可以轻松构建分区位置,例如
String partitionLocation = location + "/" + partitionKey
Run Code Online (Sandbox Code Playgroud)
(partitionKey 类似于 dt=20160329/hr=21)
然后,您可以写入该路径
df.write.parquet(partitionLocation)
Run Code Online (Sandbox Code Playgroud)
(就我而言,当我构建数据框时,我不包含分区列。不确定包含分区列时是否存在任何错误)
| 归档时间: |
|
| 查看次数: |
4755 次 |
| 最近记录: |