Я пишу программу spark-jdbc для чтения данных из базы данных postgres и перемещения тех же данных в Hive на HDFS. Я могу читать данные из postgres. Перед перемещением данных в Hive я должен создать схему и таблицу в 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 в Hive. Я получил схему с помощью функции '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))
Как я могу прочитать его и извлечь имя столбца и тип данных из коллекции, чтобы я мог использовать те же данные для изменения типа данных и создания схемы для таблицы куста?




