Apache spark 如何使用spark获取配置单元分区列名

Apache spark 如何使用spark获取配置单元分区列名,apache-spark,hive,Apache Spark,Hive,我在蜂箱里有一张桌子,它的DDL看起来像这样 创建表ABC( namestring) 被分割( col1string, col2bigint, col3string, col4string) 我需要使用spark scala将配置单元表的非分区列名存储到variable1中,并将列名存储到variable2中 预期的产出将是: variable1='name' variable2='col1,col2,col3,col4' 我遵循以下方法,但无法获得相同的结果 val df=sq

我在蜂箱里有一张桌子,它的DDL看起来像这样

创建表ABC(
name
string) 被分割(
col1
string,
col2
bigint,
col3
string,
col4
string)

我需要使用spark scala将配置单元表的非分区列名存储到variable1中,并将列名存储到variable2中

预期的产出将是:

 variable1='name'    

 variable2='col1,col2,col3,col4'
我遵循以下方法,但无法获得相同的结果

val df=sql("desc default.ABC")

val df2=df.map(r => r.getString(0)).collect.toList

List[String] = List(name, col1, col2, col3, col4, # Partition Information, # col_name, col1, col2, col3, col4)
你能帮我一下吗?

试试看:

val df=sql("show partitions default.ABC")

您可以得到“分区”列。然后收集你想要的

如果要创建表分区,可以使用spark sql execute

show create table tableName
您可以获取数据集的“createtab\u stmt”列。

尝试以下操作:

import org.apache.spark.sql.functions._
val partitionsColumns = spark.catalog.listColumns("wikicc").where(col("ispartition") === true).select("name").collect().map(_.getAs[String]("name"))
val noParitionsColumns = spark.catalog.listColumns("wikicc").where(col("ispartition") === false).select("name").collect().map(_.getAs[String]("name"))
println(partitionsColumns.mkString(","))
println(noParitionsColumns.mkString(","))

它可以解决问题,但不是优雅的操作;