如何解析Scala中StructType的字段?
我正在编写一个spark jdbc程序,从postgres db读取数据,并将相同的数据移动到HDFS上的Hive。 我能读懂博士后的数据。在将数据移动到配置单元之前,我必须在配置单元上为相同的数据创建模式和表,并使用项目提供的数据类型,这些数据类型与postgres上的数据类型类似。 例如:如何解析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}\) ->
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))