如何在spark SQL中获取列的数据类型?

时间:2016-03-18 01:41:41

标签: hive apache-spark-sql

我想找出表格每列的数据类型?

例如,让我们说我的表是用这个创建的:

create table X
(
col1 string,
col2 int,
col3 int
)

我想做一个输出这样的东西的命令:

column datatype
col1  string
col2  int

这是否有命令?最好是在SparkSQL中。但是,如果没有,那么如何使用另一种方式获取此数据?我使用spark sql来查询hive表。也许通过HIVE中的元数据?谢谢。

3 个答案:

答案 0 :(得分:2)

您可以将Hive表作为DataFrame读取并使用printSchema()函数。

在pyspark repl:

from pyspark.sql import HiveContext
hive_context = HiveContext(sc)
table=hive_context("database_name.table_name") 
table.printSchema()

类似于spark-shell repl(Scala):

import org.apache.spark.sql.hive.HiveContext
val hiveContext = new org.apache.spark.sql.hive.HiveContext
val table=hiveContext.table("database_name.table_name")
table.printSchema

答案 1 :(得分:2)

您可以使用 desc <db_name>.<tab_name>        (要么) spark.catalog.listColumns("<db>.<tab_name>")

Example:

spark.sql("create table X(col1 string,col2 int,col3 int)")

Using desc to get column_name and datatype:

spark.sql("desc default.x").select("col_name","data_type").show()

//+--------+---------+
//|col_name|data_type|
//+--------+---------+
//|    col1|   string|
//|    col2|      int|
//|    col3|      int|
//+--------+---------+

Using spark.catalog to get column_name and data_type:

spark.catalog.listColumns("default.x").select("name","dataType")show()

//+----+--------+
//|name|dataType|
//+----+--------+
//|col1|  string|
//|col2|     int|
//|col3|     int|
//+----+--------+

答案 2 :(得分:1)

在 scala 中:为您的表创建一个数据框并尝试以下操作:

df.dtypes

你的结果:

数组((PS_PROD_DESC,StringType), (PS_OPRTNG_UNIT_ID,StringType),...)