前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點選跳轉到網站: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|
+---+----+---+----+
複制
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2PnVGcq5idnJnb20GO1oHdvwVN4gTO0EjMtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.jpeg)
相關閱讀
本文由 董可倫 發表于 倫少的部落格 ,采用署名-非商業性使用-禁止演繹 3.0進行許可。
非商業轉載請注明作者及出處。商業轉載請聯系作者本人。
本文标題:Spark 覆寫寫Hive分區表,隻覆寫部分對應分區
本文連結:https://dongkelun.com/2020/01/16/sparkHivePartitionOverwrite/