要求Spark版本2.3以上,亲测2.2无效

配置

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

注意

1、saveAsTable方法无效,会全表覆盖写,需要用insertInto,详情见代码

2、insertInto需要主要DataFrame列的顺序要和Hive表里的顺序一致,不然会数据错误!

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分区表,只覆盖部分对应分区的更多相关文章

  1. 解决Spark读取Hive分区表出现Input path does not exist的问题

    假设这里出错的表为test表. 现象 Hive读取正常,不会报错,Spark读取就会出现: org.apache.hadoop.mapred.InvalidInputException: Input ...

  2. Hive分区表的导入与导出

    最近在做一个小任务,将一个CDH平台中Hive的部分数据同步到另一个平台中.毕竟我也刚开始工作,在正式开始做之前,首先进行了一段时间的练习,下面的内容就是练习时写的文档中的内容.如果哪里有错误或者疏漏 ...

  3. spark 将dataframe数据写入Hive分区表

    从spark1.2 到spark1.3,spark SQL中的SchemaRDD变为了DataFrame,DataFrame相对于SchemaRDD有了较大改变,同时提供了更多好用且方便的API.Da ...

  4. Hadoop: the definitive guide 第三版 拾遗 第十二章 之Hive分区表、桶

    Hive分区表 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念.分区表指的是在创建表时指 ...

  5. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  6. Hive分区表新增字段及修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作

    一.Hive分区表新增字段 参考博客:https://blog.csdn.net/yeweiouyang/article/details/44851459 二.Hive修改表名,列名,列注释,表注释, ...

  7. HADOOP+SPARK+ZOOKEEPER+HBASE+HIVE集群搭建(转)

    原文地址:https://www.cnblogs.com/hanzhi/articles/8794984.html 目录 引言 目录 一环境选择 1集群机器安装图 2配置说明 3下载地址 二集群的相关 ...

  8. hive 分区表

    hive中创建分区表没有什么复杂的分区类型(范围分区.列表分区.hash分区.混合分区等).分区列也不是表中的一个实际的字段,而是一个或者多个伪列.意思是说在表的数据文件中实际上并不保存分区列的信息与 ...

  9. Spark如何读写hive

    原文引自:http://blog.csdn.net/zongzhiyuan/article/details/78076842 hive数据表建立可以在hive上建立,或者使用hiveContext.s ...

  10. 【HIVE & Spark】将hive引擎换成Spark,运行速度快!怎么换?请看本文

    本教程仅仅是使用spark,能在hive用就行. 1.下载Spark; 2.WinSCP上传spark压缩包到虚拟机: 3.tar -zxvf spark-2.3.3-bin-without-hado ...

随机推荐

  1. mac os 升级到13后,系统免密失败

    # sudo vim /etc/ssh/ssh_config # 添加以下内容 PubkeyAcceptedKeyTypes +ssh-rsa

  2. 一些 trick 和思考收获

    2023.1.7 P1117 优秀的拆分 对于一眼看上去只能直接求解的题可以设置一些节点变为求每个节点的贡献 *2023 7.24 补充:这个 trick 也被称为设置关键点,通常用于区间长度固定或是 ...

  3. Web服务器及Web应用服务器

    1. 如果仅需要展示html页面,而不要其他功能,apache:(nginx也是类似功能:它本身仅提供html静态页面的功能,不能支持jsp.java servlet.asp等功能,但通过同其他应用服 ...

  4. 编译wasm Web应用

    刚学完WebAssembly的入门课,卖弄一点入门知识. 首先我们知道wasm是目标语言,是一种新的V-ISA标准,所以编写wasm应用,正常来说不会直接使用WAT可读文本格式,更不会用wasm字节码 ...

  5. 【Flutter】一文读懂混入类Mixin

    [Flutter]一文读懂混入类Mixin 基本介绍 Mixin是一种有利于代码复用,又避免了多继承的解决方案. Mixin 是面向对象程序设计语言中的类,提供了方法的实现,其他类可以访问 Mixin ...

  6. 手撕Vue-Router-提取路由信息

    前言 好了经过上一篇的学习,我们已经知道了如何监听 Hash 的变化,如何监听路径的一个变化,本篇我们就可以来实现我们自己的 VueRouter 了, 那么怎么实现呢,在实现之前我们先来回顾一下官方的 ...

  7. Spring Boot 3.2发布:大量Java 21的支持上线,改进可观测性

    就在今天凌晨,Spring Boot 3.2正式发布了!该版本是在Java 21正式发布之后的重要支持版本,所以在该版本中包含大量对Java 21支持的优化. 下面,我们分别通过Spring官方发布的 ...

  8. MySQL 出现 Error 1114 (HY000) The table is full 的解决方法

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin MySQL 出现 The table is full 只有一个原因,对应的表数据容量达到系统上限 . 这个问题可能是2 ...

  9. Acwing4244牛的比赛

    Acwing4244.牛的比赛 题目部分 N 头奶牛,编号 1∼N,一起参加比赛. 奶牛的战斗力两两不同. 这些奶牛之间已经进行了 M轮两两对决. 在对决中,战斗力高的奶牛一定会战胜战斗力低的奶牛. ...

  10. UNCTF-Crypto wp

    2020年 easy_rsa 题目 from Crypto.Util import number import gmpy2 from Crypto.Util.number import bytes_t ...