Spark 覆盖写Hive分区表,只覆盖部分对应分区
要求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分区表,只覆盖部分对应分区的更多相关文章
- 解决Spark读取Hive分区表出现Input path does not exist的问题
假设这里出错的表为test表. 现象 Hive读取正常,不会报错,Spark读取就会出现: org.apache.hadoop.mapred.InvalidInputException: Input ...
- Hive分区表的导入与导出
最近在做一个小任务,将一个CDH平台中Hive的部分数据同步到另一个平台中.毕竟我也刚开始工作,在正式开始做之前,首先进行了一段时间的练习,下面的内容就是练习时写的文档中的内容.如果哪里有错误或者疏漏 ...
- spark 将dataframe数据写入Hive分区表
从spark1.2 到spark1.3,spark SQL中的SchemaRDD变为了DataFrame,DataFrame相对于SchemaRDD有了较大改变,同时提供了更多好用且方便的API.Da ...
- Hadoop: the definitive guide 第三版 拾遗 第十二章 之Hive分区表、桶
Hive分区表 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念.分区表指的是在创建表时指 ...
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...
- Hive分区表新增字段及修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作
一.Hive分区表新增字段 参考博客:https://blog.csdn.net/yeweiouyang/article/details/44851459 二.Hive修改表名,列名,列注释,表注释, ...
- HADOOP+SPARK+ZOOKEEPER+HBASE+HIVE集群搭建(转)
原文地址:https://www.cnblogs.com/hanzhi/articles/8794984.html 目录 引言 目录 一环境选择 1集群机器安装图 2配置说明 3下载地址 二集群的相关 ...
- hive 分区表
hive中创建分区表没有什么复杂的分区类型(范围分区.列表分区.hash分区.混合分区等).分区列也不是表中的一个实际的字段,而是一个或者多个伪列.意思是说在表的数据文件中实际上并不保存分区列的信息与 ...
- Spark如何读写hive
原文引自:http://blog.csdn.net/zongzhiyuan/article/details/78076842 hive数据表建立可以在hive上建立,或者使用hiveContext.s ...
- 【HIVE & Spark】将hive引擎换成Spark,运行速度快!怎么换?请看本文
本教程仅仅是使用spark,能在hive用就行. 1.下载Spark; 2.WinSCP上传spark压缩包到虚拟机: 3.tar -zxvf spark-2.3.3-bin-without-hado ...
随机推荐
- z函数|exkmp|拓展kmp 笔记+图解
题外话,我找个什么时间把kmp也加一下图解 z函数|exkmp 别担心 这个exkmp和kmp没毛点关系,请放心食用. 本文下标以1开始,为什么?因为1开始就不需要进行长度和下标的转换,长度即下标. ...
- Python 作用域:局部作用域、全局作用域和使用 global 关键字
变量只在创建它的区域内可用.这被称为作用域. 局部作用域 在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用. 示例:在函数内部创建的变量在该函数内部可用: def myfunc() ...
- 资源迁移OSS方案记录
视频资源迁移到OSS服务器上,记录一下迁移过程. 搭建流程 在阿里云上购买oss,并获取具有该Bucket访问权限的AccessKey ID和AccessKey Secret信息. 数据迁移方案一 第 ...
- [Python急救站课程]简单的人机对话
一个简单的人机对话程序 name = input("输入姓名:") # input输入数据 print("{}同学,学好Python,前途无量!".format ...
- [数据校验/数据质量] 数据校验框架:hibernate-validation
0 前言 其一,项目中普遍遇到了此问题,故近两天深入地研究了一下. 其二,能够自信地说,仔细看完本篇,就无需再看其他的Java数据校验框架的文章了. 1 数据校验框架概述 1.0 数据校验框架的产生背 ...
- [NOIP 考前备战] 线段树刷题
备战线段树 T1 AcWing .1275. 最大数 查询最大值 + 单点修改 #include <bits/stdc++.h> #define int long long using n ...
- AcWing100 IncDec Sequence
求出\(a\)的差分序列\(b\),其中\(b_1 = a_1, b_2 = a_2 - a_1, ... b_n = a_n - a_{n - 1}\) 根据题意以及公式可以发现,如果我们想让序列所 ...
- Kafka集群调优+能力探底
一.前言 我们需要对4个规格的kafka能力进行探底,即其可以承载的最大吞吐:4个规格对应的单节点的配置如下: 标准版: 2C4G 铂金版: 4C8G 专业版: 8C16G 企业版: 16C32G 另 ...
- Azure - 机器学习企业级服务概述与介绍
Azure 机器学习 - 为端到端机器学习生命周期使用企业级 AI 服务. 关注TechLead,分享AI全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦 ...
- 基于Raft算法的DLedger-Library分析
1 背景 在分布式系统应用中,高可用.一致性是经常面临的问题,针对不同的应用场景,我们会选择不同的架构方式,比如master-slave.基于ZooKeeper选主.随着时间的推移,出现了基于Raft ...