Spark分区表插入数据清空分区数据问题的解决办法

原本希望通过Spark的DataFrame的saveAsTable自动创建
然后再通过insertInto或者别的方式插入分区,结果发现这些方法都不可行,每一次运行会自动truncate清空原来的数据。哪怕是加了条件判断,通过createOrReplaceGlobalTempView的方式去执行Spark SQL的插入仍然是一样的效果。
如下面所示:

val appViewName = s"${appTableName}_tmp_$partitionKey"if (!spark.catalog.tableExists(dbName, appTableName)) {SDLogger.info("APP一级分类表不存在,用saveAsTable方式自动创建")pivoted_app.write.mode("overwrite").partitionBy("dataspan").saveAsTable(appTableName)} else {pivoted_app.createOrReplaceGlobalTempView(appViewName)spark.sql(s"INSERT OVERWRITE TABLE $appTableName PARTITION(dataspan) SELECT * FROM global_temp.$appViewName")spark.catalog.dropGlobalTempView(appViewName)}

这个看来是Spark的一个bug,不过我用的Spark2.3,后续的版本是否修复这个问题就不得而知了,通过日志大致能看出在插入数据的时候,使用的parquet格式,首先将数据存储到hdfs的临时目录下,这个过程中应该是产生了bug,将数据清空了,导致每一次运行都只能得到新的表。

只能是提前创建好表

 CREATE TABLE test(id bigint,feature float)
PARTITIONED BY 
(
dataspan STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
NULL DEFINED AS ''
STORED AS TEXTFILE;

我原本想着懒得去创建了,想自动创建一个,结果还是不行。由于这个分区的列非常多,手动创建其实也是很麻烦的,我先跑了一个测试数据,照着日志打印出来的Schema创建即可。类似于如下:

optional fixed_len_byte_array(16) app_11uyp (DECIMAL(38,6));
optional fixed_len_byte_array(16) app_x72t7 (DECIMAL(38,6));

然后再去插入

pivoted_app.createOrReplaceGlobalTempView(appViewName)
spark.sql(s"INSERT OVERWRITE TABLE $appTableName PARTITION(dataspan) SELECT * FROM global_temp.$appViewName")
spark.catalog.dropGlobalTempView(appViewName)

还有一种方法是提前创建外部表,把数据存储到hdfs目录下,然后去挂载数据,但是这个方法略微繁琐,不如直接插入分区方便一些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05. 【Android教程】Android 程序签名打包

在上一章,我们创建了自己的 Android 工程,并成功的在模拟器中运行起来。同时提到,工程目录中有一个 bin 目录,运行之后我们可以在此目录下找到我们的 apk。那么不难想到,我们在点“Run”之后,系统会编译我们…

蓝桥杯嵌入式之串口(中断读取)

一、CUbeMX开启串口 1.开启串口USART1 记得手动开起PA9、PA10 2.配置波特率、开启串口中断 3.初始化开启接收中断 定于接收缓存区接收长度(单位字节) 4.在接收事件回调函数中进行操作 sscanf((char*)usart_box,"%4s",temp1); //只取收到的…

高频SQL 产品销售分析 I

题目信息 销售表 Sales: -------------------- | Column Name | Type | -------------------- | sale_id | int | | product_id | int | | year | int | | quantity | int | | price | int | -------------------- (sale_id, yea…

以太网链路聚合——增加带宽,解决生成树收敛慢的问题

目录 一.对STP生成树的补充 1.STP接口状态 2.STP生成树的改进 二.网络可靠性 1.单板可靠性 2.设备可靠性 3.链路可靠性 三.链路聚合 1.多条链路聚合增加带宽 2.链路聚合术语 四.链路聚合模式 1.手动模式 2.LASP模式 (1).LASP术语 (2&…

使用itext-core生成PDF

1、添加引用依赖包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>8.0.3</version><type>pom</type></dependency> 2、上代码 package com.student.demo.pdf;impor…

什么是RISC-V?开源 ISA 如何重塑未来的处理器设计

RISC-V代表了处理器架构的范式转变&#xff0c;特点是其开源模型简化了设计理念并促进了全球community-driven的开发。RISC-V导致了处理器技术发展前进方式的重大转变&#xff0c;提供了一个不受传统复杂性阻碍的全新视角。 RISC-V起源于加州大学伯克利分校的学术起点&#xff…

逐步学习Go-协程goroutine

参考&#xff1a;逐步学习Go-协程goroutine – FOF编程网 什么是线程&#xff1f; 简单来说线程就是现代操作系统使用CPU的基本单元。线程基本包括了线程ID&#xff0c;程序计数器&#xff0c;寄存器和线程栈。线程共享进程的代码区&#xff0c;数据区和操作系统的资源。 线…

前端学习-01:Windows 安装 npm 教程

一、安装 Node.js Node.js 官方下载地址&#xff1a;点击这里点击绿色的"Download Node.js vxxxx"下载完成后双击开始安装点击 Next 接受协议&#xff0c;点击 Next 点击 Change&#xff0c;自定义安装目录&#xff0c;然后点击 Next 所有默认全部安装即可&#xff…

在 Linux CentOS 中安装 Docker Engine(Dockers 引擎)【图文详解】

官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 操作系统要求 如果我们要在 CentOS 中安装 Docker 引擎&#xff0c;那么 CentOS 操作系统需要是以下版本之一的&#xff0c;且是处于维护的 CentOS 版本&#xff1a; CentOS 7CentOS Stream 8CentOS Str…

关于C/C++头文件引起的编译问题

在 C 中&#xff0c;#include 是用于包含头文件的预处理指令。头文件是包含函数声明、类定义、常量等的文件&#xff0c;通常以 .h 或 .hpp 作为文件扩展名。 #include 可以使用两种形式来包含头文件&#xff1a; 使用双引号 (")&#xff1a; #include "CESO.h"…

【Web应用技术基础】CSS(4)——背景样式

第1题&#xff1a;背景颜色 .html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Hello World</title><link rel"stylesheet" href"step1/CSS/style.css"> </head><body>&…

Zookeeper的系统架构

先看一张图&#xff1a; ZooKeeper 的架构图中我们需要了解和掌握的主要有&#xff1a; 1&#xff1a; ZooKeeper分为服务器端&#xff08;Server&#xff09; 和客户端&#xff08;Client&#xff09;&#xff0c;客户端可以连接到整个ZooKeeper服务的任意服务器上&#xff…

Flink on Kubernetes (flink-operator) 部署Flink

flink on k8s 官网 https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.1/docs/try-flink-kubernetes-operator/quick-start/ 我的部署脚本和官网不一样&#xff0c;有些地方官网不够详细 部署k8s集群 注意&#xff0c;按照默认配置至少有两台wo…

手机短信验证码自动转发到服务器

今天写一个自动化处理程序&#xff0c;需要验证码登录&#xff0c;怎么样把手机收到的短信自动转发到服务器接口呢&#xff1f; 利用ios手机快捷指令的功能 打开快捷指令点击中间自动化点击右上角号选择信息信息包含选取&#xff0c;输入验证码选择立即执行点击下一步按下图配…

docker run 使用 -p 命令一直显示端口被占用

解决办法 将 -p 换成 --net host 例如&#xff1a; docker run --name one-api -d --restart always -p 3000:3000 -e TZAsia/Shanghai -v /root/oneapi/data:/data justsong/one-api # 换成 docker run --name one-api -d --restart always --net host -e TZAsia/Shanghai -…

ZooKeeper 分布式锁的实现方法

如果有客户端1、客户端2等N个客户端争抢一个 Zookeeper 分布式锁。大致如下&#xff1a; 1&#xff1a; 大家都是上来直接创建一个锁节点下的一个接一个的临时有序节点 2&#xff1a; 如果自己不是第一个节点&#xff0c;就对自己上一个节点加监听器 3&#xff1a; 只要上一…

vue + LogicFlow 实现流程图展示

vue LogicFlow 实现流程图展示 1.背景 部门主要负责低代码平台&#xff0c;配置端负责配置流程图&#xff0c;引擎端负责流程执行&#xff0c;原引擎端只负责流程执行控制以及流程历史列表展示。现在提出个新的要求&#xff0c;认为仅历史记录不直观&#xff0c;需要在展示完…

Overcooked!(并查集区间元素合并优化)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 5 5 1 1 2 3 1 2 2 2 4 3 1 4 3 2 5 输出 YES YES NO 思路&#xff1a; 根据题意&#xff0c;这…

数据结构初阶:排序

排序的概念及其运用 排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性 &#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&…

HR岗位管理:岗位职级管理体系是什么?概念、知识及方法工具梳理

岗位是组织中最具体、最小的一个基本单位。组织一般都是因事设岗&#xff0c;因而岗位是组织要求个体完成一项或多项责任而赋予个体的权力的总和。岗位是与人相对应的&#xff0c;通常一个岗位只能由一个人担任。正是因为人与岗位相匹配&#xff0c;所以企业人力资源成本管控的…