如何使用 spark 获取 hive 分区列名
Posted
技术标签:
【中文标题】如何使用 spark 获取 hive 分区列名【英文标题】:How to get the hive partition column name using spark 【发布时间】:2018-07-26 14:10:21 【问题描述】:我在 hive 中有一张表,其 DDL 如下所示。
创建表 ABC(
name
字符串)
由 (
col1
字符串,
col2
bigint,
col3
字符串,
col4
字符串)
我有一个要求,我必须使用 spark scala 将 hive 表的非分区列名存储到 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)
你能帮我解决这个问题吗?
【问题讨论】:
【参考方案1】:试试这个:
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(","))
【讨论】:
【参考方案2】:试试看:
val df=sql("show partitions default.ABC")
您可以获得“分区”列。然后收集你想要的。
如果要创建表分区,可以使用 spark-sql 执行
show create table tableName
你可以得到Dataset的'createtab_stmt'列。
【讨论】:
可以解决问题,但不是优雅的操作;以上是关于如何使用 spark 获取 hive 分区列名的主要内容,如果未能解决你的问题,请参考以下文章