Я создал фрейм данных, прочитав таблицу RDBMS из postgres, как показано ниже:
val yearDF = spark.read.format("jdbc").option("url", connectionUrl)
.option("dbtable", s"(${execQuery}) as year2017")
.option("user", devUserName)
.option("password", devPassword)
.option("numPartitions",10)
.load()
execQuery
содержание: select qtd_balance_text,ytd_balance_text,del_flag,source_system_name,period_year from dbname.hrtable;
Это схема моего окончательного фрейма данных:
println(yearDF.schema)
StructType(StructField(qtd_balance_text,StringType,true), StructField(ytd_balance_text,StringType,true), StructField(del_flag,IntegerType,true), StructField(source_system_name,StringType,true), StructField(period_year,DecimalType(15,0),true))
В Hive есть таблица с таким же именем: hrtable
и такими же именами столбцов. Прежде чем вводить данные в таблицу Hive, я хочу проверить код, чтобы убедиться, что схема таблиц GP и Hive одинакова.
Мне удалось получить доступ к схеме следующим образом:
spark.sql("desc formatted databasename.hrtable").collect.foreach(println)
Но проблема в том, что он собирает схему другим способом
[ qtd_balance_text,bigint,null]
[ ytd_balance_text,string,null]
[ del_flag,string,null]
[source_system_name,bigint,null]
[ period_year,bigint,null]
[Type,MANAGED,]
[Provider,hive,]
[Table Properties,[orc.stripe.size=536870912, transient_lastDdlTime=1523914516, last_modified_time=1523914516, last_modified_by=username, orc.compress.size=268435456, orc.compress=ZLIB, serialization.null.format=null],]
[Location,hdfs://devenv/apps/hive/warehouse/databasename.db/hrtable,]
[Serde Library,org.apache.hadoop.hive.ql.io.orc.OrcSerde,]
[InputFormat,org.apache.hadoop.hive.ql.io.orc.OrcInputFormat,]
[OutputFormat,org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat,]
[Storage Properties,[serialization.format=1],]
[Partition Provider,Catalog,]
Ясно, что я не могу схемы, которые присутствуют таким образом, и я не мог понять, как это сделать.
Может ли кто-нибудь дать мне знать, как правильно сравнить схему dataframe yearDF
и таблицу кустов: hrtable
?