我想找出表格每列的数据类型?
例如,让我们说我的表是用这个创建的:
create table X
(
col1 string,
col2 int,
col3 int
)
我想做一个输出这样的东西的命令:
column datatype
col1 string
col2 int
这是否有命令?最好是在SparkSQL中。但是,如果没有,那么如何使用另一种方式获取此数据?我使用spark sql来查询hive表。也许通过HIVE中的元数据?谢谢。
答案 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),...)