如何解析Scala中StructType的字段?

如何解析Scala中StructType的字段?,scala,apache-spark,hive,Scala,Apache Spark,Hive,我正在编写一个spark jdbc程序,从postgres db读取数据,并将相同的数据移动到HDFS上的Hive。 我能读懂博士后的数据。在将数据移动到配置单元之前,我必须在配置单元上为相同的数据创建模式和表,并使用项目提供的数据类型,这些数据类型与postgres上的数据类型类似。 例如: source datatype Hive datatype character varying\([0-9]{1,4}\) ->

我正在编写一个spark jdbc程序,从postgres db读取数据,并将相同的数据移动到HDFS上的Hive。 我能读懂博士后的数据。在将数据移动到配置单元之前,我必须在配置单元上为相同的数据创建模式和表,并使用项目提供的数据类型,这些数据类型与postgres上的数据类型类似。 例如:

source datatype                            Hive datatype
character varying\([0-9]{1,4}\)       ->    string
bigint                                ->    bigint
integer                               ->    int
smallint                              ->    int
numeric\([0-9]{1,3},0\)               ->    bigint
numeric\([0-9]{1,3},[1-9][0-9]{0,2}\) ->    double
如果源上的列具有数据类型
smallint
,则应在配置单元上使其成为
int
。我使用函数“schema”获得了模式

val tbSchema = yearDF.schema
现在,tbSchema的形式是:
org.apache.spark.sql.types.StructType
,我不知道如何解析和读取其中的值

例如,如果StructType有:
StructType(StructField(id,IntegerType,false)、StructField(name,StringType,true)、StructField(company,StringType,true))

如何读取并从集合中提取columnName和datatype,以便使用相同的详细信息更改数据类型并为配置单元表创建架构?

通常由名为的子元素组成,该子元素具有以下构造函数:

要获取这些字段,只需执行以下操作

val tbSchema = yearDF.schema.map(s => (s.name, s.dataType))
val tbSchema = yearDF.schema.map(s => (s.name, s.dataType))