天天看點

Spark 覆寫寫Hive分區表,隻覆寫部分對應分區

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點選跳轉到網站:https://www.captainai.net/dongkelun

前言

總結Spark覆寫寫Hive分區表,如何隻覆寫部分對應分區

版本

要求Spark版本2.3以上,親測2.2無效

配置

config("spark.sql.sources.partitionOverwriteMode","dynamic")           

複制

注意

1、saveAsTable方法無效,會全表覆寫寫,需要用insertInto,詳情見代碼

2、insertInto需要主要DataFrame列的順序要和Hive表裡的順序一緻,不然會資料錯誤!

代碼

已上傳github

package com.dkl.blog.spark.hive

import org.apache.spark.sql.SparkSession

/**
  * Created by dongkelun on 2020/1/16 15:25
  *
  * 部落格:Spark 覆寫寫Hive分區表,隻覆寫部分對應分區
  *
  * 要求Spark版本2.3以上
  */
object SparkHivePartitionOverwrite {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder()
      .appName("SparkHivePartitionOverwrite")
      .master("local")
      .config("spark.sql.parquet.writeLegacyFormat", true)
      .config("spark.sql.sources.partitionOverwriteMode","dynamic")
      .enableHiveSupport()
      .getOrCreate()

    import spark.sql

    val data = Array(("001", "張三", 21, "2018"), ("002", "李四", 18, "2017"))

    val df = spark.createDataFrame(data).toDF("id", "name", "age", "year")
    //建立臨時表
    df.createOrReplaceTempView("temp_table")

    val tableName="test_partition"
    //切換hive的資料庫
    sql("use test")
    //    1、建立分區表,并寫入資料
    df.write.mode("overwrite").partitionBy("year").saveAsTable(tableName)

    spark.table(tableName).show()

    val data1 = Array(("011", "Sam", 21, "2018"))

    val df1 = spark.createDataFrame(data1).toDF("id", "name", "age", "year")
//    df1.write.mode("overwrite").partitionBy("year").saveAsTable(tableName)    //不成功,全表覆寫
//    df1.write.mode("overwrite").format("Hive").partitionBy("year").saveAsTable(tableName) //不成功,全表覆寫
    df1.write.mode("overwrite").insertInto(tableName)

    spark.table(tableName).show()

    spark.stop
  }

}           

複制

結果

+---+----+---+----+
| id|name|age|year|
+---+----+---+----+
|002|  李四| 18|2017|
|001|  張三| 21|2018|
+---+----+---+----+

+---+----+---+----+
| id|name|age|year|
+---+----+---+----+
|011| Sam| 21|2018|
+---+----+---+----+           

複制

Spark 覆寫寫Hive分區表,隻覆寫部分對應分區

相關閱讀

本文由 董可倫 發表于 倫少的部落格 ,采用署名-非商業性使用-禁止演繹 3.0進行許可。

非商業轉載請注明作者及出處。商業轉載請聯系作者本人。

本文标題:Spark 覆寫寫Hive分區表,隻覆寫部分對應分區

本文連結:https://dongkelun.com/2020/01/16/sparkHivePartitionOverwrite/