Spark_SparkOnHive_海豚调度跑任务写入Hive表失败解决

devtools/2024/12/23 0:34:40/

背景

        前段时间我在海豚上打包程序写hive出现了一个问题,spark程序向hive写数据时,报了如下bug,

org.apache.spark.sql.AnalysisException:
The format of the existing table test.xx is 'HiveFileFormat' 
It doesn't match the specified format 'ParquetFIleFormat'

原因分析:

一开始我以为是我再hue上创建hive建的表,建表格式大致如下


create table if not exists test.xx (
id int,
name string
)
stored as PARQUET/***created by: Matrix70*blog:  https://blog.csdn.net/qq_52128187?type=blog*/

 后来我删了建,把分区也删了,parquet格式也加了,还是报这个问题,因此排除是建表问题

后来我看代码,入库的语句如下,死活写不进去

println("===========开始入库========")
userFrame.write.mode.("overwrite").saveAsTable("test.xx")

后来我换了 一种写法,写进去了。

println("===========开始入库========")
userFrame.write.mode.("overwrite").insertInto("test.xx")

结论

如上,为什么会这样呢,我想了一下,

  insertInto 方法将 DataFrame 的数据插入到一个已经存在的Hive表中,如果该表已经存在,则直接将数据插入到该表中,如果表不存在,则会抛出异常。如果表存在,但是表结构和DataFrame结构不匹配,则会抛出异常。

  saveAsTable方法将DataFrame保存为一个Hive表。如果表不存在,则会自动创建该表,如果表已经存在,则会用DataFrame的数据覆盖该表中的数据。与insertInto方法不同的是,saveAsTable方法可以自动创建表,而不需要手动创建表。此外,saveAsTable方法还可以指定其他的存储格式,如ORC、Parquet等。

所以如果我不使用插入的方法,还是要使用 saveAsTable的话,就是这样写

println("===========开始入库========")
userFrame.write.mode("overwrite").format("parquet").saveAsTable("test.xx")


http://www.ppmy.cn/devtools/46089.html

相关文章

OpenHarmony开发者大会2024:鸿心聚力 智引未来

2024年5月25日,OpenAtom OpenHarmony(简称“OpenHarmony")委员会以“鸿心聚力,智引未来”为主题,在创新之城深圳举办OpenHarmony开发者大会2024,为开发者、产业组织、生态伙伴和行业客户搭建一个交流、分享和学习…

蓝桥杯物联网竞赛_STM32L071KBU6_国赛编程中遇到的BUG

国赛编程中遇到的BUG不多,不过也值得注意 1、LORA发送接收出问题: 这个问题和以往不同,我LORA什么都配置好了,代码写的没有问题,也初始化了,但就是收发不显示,连续用了两个工程的代码都不行 问…

如何 实现PHP和java 的 jwt token互通

其实最简单的问题就是 你的拓展包 用错了 PHP使用 composer require firebase/php-jwt java 需要引入 <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.…

gitLab 使用tortoiseGit 克隆新项目 一直提示tortoiseGitPlink输入密码 输完也不生效

问题描述&#xff1a;准备用TortoiseGit拉取gitlab上一个新项目代码&#xff0c;出现tortoiseGitPlink提示让输入密码&#xff0c;输入后又弹出&#xff0c;反复几次&#xff0c;无法down下来代码。 解决方案&#xff1a; 1.找到PuTTYgen工具&#xff0c;打开 2. 点击load 按钮…

【人工智能Ⅱ】实验8:生成对抗网络

实验8&#xff1a;生成对抗网络 一&#xff1a;实验目的 1&#xff1a;理解生成对抗网络的基本原理。 2&#xff1a;学会构建改进的生成对抗网络&#xff0c;如DCGAN、WGAN、WGAN-GP等。 3&#xff1a;学习在更为真实的数据集上应用生成对抗网络的方法。 二&#xff1a;实验…

[Linux]重定向

一、struct file内核对象 struct file是在内核中创建&#xff0c;专门用来管理被打开文件的结构体。struct file中包含了打开文件的所有属性&#xff0c;文件的操作方法集以及文件缓冲区&#xff08;无论读写&#xff0c;我们都需要先将数据加载到文件缓冲区中。&#xff09;等…

Redis学习篇3:缓存更新策略与数据更新、淘汰策略

一、缓存更新策略 二、主动更新 三、过期策略 3.1 如何知道过期&#xff1f; 3.2 删除策略 四、内存淘汰策略 数据淘汰策略-使用建议 一、缓存更新策略 Redis是基于内存的数据库&#xff0c;它的优点就是在对数据进行操作的时候快&#xff0c;并且通过…

SiT : Self-supervised vision Transformer

从NLP Transformer中借鉴而来的视觉 Transformer 在使用大规模监督数据或某种形式的协同监督&#xff08;例如教师网络&#xff09;进行预训练时已被证明是有效的。这些经过监督预训练的视觉Transformer在下游任务中通过最小的改动就能取得出色的结果。 随着监督预训练&#x…