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

7eumitmz  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(331)

我在 hive 里有一张table,它的ddl看起来像这样。
创建表( name 字符串)按( col1 字符串, col2 比基特, col3 字符串, col4 (字符串)
我有一个要求,我必须使用sparkscala将配置单元表的非分区列名存储到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)

你能帮我走近吗?

z9ju0rcb

z9ju0rcb1#

试试这个:

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(","))
oo7oh9g9

oo7oh9g92#

试试看:

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

你可以得到'分区'列。然后收集你想要的。
如果要创建表分区,可以使用sparksql execute

show create table tableName

您可以获得数据集的“createtab\u stmt”列。

相关问题