Как эффективный способ сохранить фрейм данных в таблицу Hive? - PullRequest
0 голосов
/ 04 сентября 2018

Мы переходим с Greenplum на HDFS. Данные поступают из исходных таблиц в Greenplum через огромный ETL, а из Greenplum мы просто выгружаем данные в HDFS с помощью Spark. Поэтому я пытаюсь прочитать таблицу GP и загрузить ее в таблицы Hive на HDFS с помощью Spark.

У меня есть данные, считанные из таблицы 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?

...