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

Apache spark 如何在spark SQL中获取列的数据类型?,apache-spark,hive,apache-spark-sql,Apache Spark,Hive,Apache Spark Sql,我想找出表中每列的数据类型 例如,假设我的表是使用以下方法创建的: create table X ( col1 string, col2 int, col3 int ) 我想执行一个命令,输出如下内容: column datatype col1 string col2 int 有这个命令吗?最好使用SparkSQL。但是,如果没有,那么如何使用另一种方法获取这些数据呢?我正在使用spark sql查询配置单元表。也许是通过HIVE中的元数据?多谢各位 您可以将配置单元表读取为数据帧,并使

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

例如,假设我的表是使用以下方法创建的:

create table X
(
col1 string,
col2 int,
col3 int
)
我想执行一个命令,输出如下内容:

column datatype
col1  string
col2  int

有这个命令吗?最好使用SparkSQL。但是,如果没有,那么如何使用另一种方法获取这些数据呢?我正在使用spark sql查询配置单元表。也许是通过HIVE中的元数据?多谢各位

您可以将配置单元表读取为数据帧,并使用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):


您可以将配置单元表读取为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):


您可以使用
desc.
(或)
spark.catalog.listColumns(“.”)

spark.sql("create table X(col1 string,col2 int,col3 int)")
spark.catalog.listColumns("default.x").select("name","dataType")show()

//+----+--------+
//|name|dataType|
//+----+--------+
//|col1|  string|
//|col2|     int|
//|col3|     int|
//+----+--------+
示例:

spark.sql("create table X(col1 string,col2 int,col3 int)")
spark.catalog.listColumns("default.x").select("name","dataType")show()

//+----+--------+
//|name|dataType|
//+----+--------+
//|col1|  string|
//|col2|     int|
//|col3|     int|
//+----+--------+
使用desc获取列名和数据类型:

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

//+--------+---------+
//|col_name|data_type|
//+--------+---------+
//|    col1|   string|
//|    col2|      int|
//|    col3|      int|
//+--------+---------+
使用spark.catalog获取列名称和数据类型:

spark.sql("create table X(col1 string,col2 int,col3 int)")
spark.catalog.listColumns("default.x").select("name","dataType")show()

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

您可以使用
desc.
(或)
spark.catalog.listColumns(“.”)

spark.sql("create table X(col1 string,col2 int,col3 int)")
spark.catalog.listColumns("default.x").select("name","dataType")show()

//+----+--------+
//|name|dataType|
//+----+--------+
//|col1|  string|
//|col2|     int|
//|col3|     int|
//+----+--------+
示例:

spark.sql("create table X(col1 string,col2 int,col3 int)")
spark.catalog.listColumns("default.x").select("name","dataType")show()

//+----+--------+
//|name|dataType|
//+----+--------+
//|col1|  string|
//|col2|     int|
//|col3|     int|
//+----+--------+
使用desc获取列名和数据类型:

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

//+--------+---------+
//|col_name|data_type|
//+--------+---------+
//|    col1|   string|
//|    col2|      int|
//|    col3|      int|
//+--------+---------+
使用spark.catalog获取列名称和数据类型:

spark.sql("create table X(col1 string,col2 int,col3 int)")
spark.catalog.listColumns("default.x").select("name","dataType")show()

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

很好,谢谢。有没有一种方法可以只用sql语法来实现这一点?我们有一些内部工具,其中spark对象不暴露于仅限用户的SQL命令。谢谢。我们需要HiveContext来读取Hive中的表。我不确定使用SqlContext是否也可以这样做。pyspark示例缺少
函数。pyspark中的第3行应该是:
table=hive\u context.table(“database\u name.table\u name”)
如果不这样做,您将得到一个错误。df.dtypes它将给出数据框列名和相应的数据类型。很酷,谢谢。有没有一种方法可以只用sql语法来实现这一点?我们有一些内部工具,其中spark对象不暴露于仅限用户的SQL命令。谢谢。我们需要HiveContext来读取Hive中的表。我不确定使用SqlContext是否也可以这样做。pyspark示例缺少
函数。pyspark中的第3行应该是:
table=hive\u context.table(“database\u name.table\u name”)
如果不这样做,您将得到一个错误。df.dtypes它将给出数据帧列名和相应的数据类型。