我们正在从Greenplum迁移到HDFS。 数据通过巨大的ETL从源表发送到Greenplum,并从Greenplum发送,我们只是使用Spark将数据转储到HDFS中。 因此,我正在尝试读取GP表,并使用Spark将其加载到HDFS的Hive表中。
我从GP表中读取了一个数据帧,如下所示:
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()
有多种选项可将数据框保存到Hive表中。
第一种方法:
yearDf.write().mode("overwrite").partitionBy("source_system_name","period_year","period_num").saveAsTable("schemaName.tableName");
第二种方法:
myDf.createOrReplaceTempView("yearData");
spark.sql("insert into schema.table partition("source_system_name","period_year","period_num") select * from yearData");
上述方式的优缺点是什么? 我们在生产中有巨大的表,通常需要很长时间才能将数据加载到Hive中。谁能让我知道哪种方法是将数据从数据框保存到Hive表的有效且推荐的方法?