Apache spark 使用Spark SQL将数据插入静态配置单元分区

Apache spark 使用Spark SQL将数据插入静态配置单元分区,apache-spark,hive,Apache Spark,Hive,我不知道如何使用Spark SQL将数据插入配置单元表的静态分区。我可以使用这样的代码写入动态分区: df.write.partitionBy("key").insertInto("my_table") 但是,我不知道如何将数据插入静态分区。这意味着,我想定义一个分区,在这个分区中,不需要向数据帧添加列,就可以写入整个数据帧 我看到在本文中提到了静态分区 类,所以我猜它是受支持的。是否有一个公共API来实现我想要的功能?您可以使用 DataFrame tableMeta = sqlContex

我不知道如何使用Spark SQL将数据插入配置单元表的静态分区。我可以使用这样的代码写入动态分区:

df.write.partitionBy("key").insertInto("my_table")
但是,我不知道如何将数据插入静态分区。这意味着,我想定义一个分区,在这个分区中,不需要向数据帧添加列,就可以写入整个数据帧

我看到在本文中提到了静态分区 类,所以我猜它是受支持的。是否有一个公共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)

(在我构建数据框时,我不包括分区列。不确定在包含分区列时是否有任何错误)

我认为将数据框注册为临时表,然后运行配置单元SQL将数据从那里插入到特定分区是一个比这更好的解决方案(它不那么脆弱),但我特别想知道Spark中对此的本机支持。同意运行HiveSQL来插入数据。我也在寻找对此的本机支持,但在任何地方都找不到。你能找到任何类似于写入动态分区的API吗?不,我找不到任何东西,最终将RRD注册为临时表并从中运行SQL INSERT。然而,很多配置单元代码已经在Spark 2.0中重写,所以现在可能可以了。这对您有用吗,我无法使用insertinto进行分区