当前位置: 首页 > news >正文

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

背景

        前段时间我在海豚上打包程序写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")

相关文章:

  • Mac/Linux getline 无法读取文件内容(读取内容无法显示)
  • 【数据库】MySQL表的操作
  • jenkins的简单使用
  • 函数尾调用优化
  • 面试官:对于MQ中的消息丢失你是如何理解的?
  • OpenAI助手API接入-问答对自动生成
  • 江苏大信环境科技有限公司:环保领域的开拓者与引领者
  • Anaconda中的常用科学计算工具
  • The Best Toolkit 最好用的工具集
  • 安装LLVM后无法使用FileCheck工具
  • 城市之旅:使用 LLM 和 Elasticsearch 简化地理空间搜索(一)
  • 【微服务】部署mysql集群,主从复制,读写分离
  • 地图编辑功能的使用场景
  • 智能工厂生产设备实时监控技术的UI设计
  • Go 语言的控制结构:条件与循环
  • ES6指北【2】—— 箭头函数
  • JavaScript 如何正确处理 Unicode 编码问题!
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • MaxCompute访问TableStore(OTS) 数据
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • python_bomb----数据类型总结
  • React-生命周期杂记
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 简析gRPC client 连接管理
  • 两列自适应布局方案整理
  • 前端技术周刊 2019-02-11 Serverless
  • 新书推荐|Windows黑客编程技术详解
  • k8s使用glusterfs实现动态持久化存储
  • ​Redis 实现计数器和限速器的
  • ​人工智能书单(数学基础篇)
  • ​什么是bug?bug的源头在哪里?
  • #Linux(make工具和makefile文件以及makefile语法)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (LeetCode 49)Anagrams
  • (Oracle)SQL优化技巧(一):分页查询
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二十三)Flask之高频面试点
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (十六)Flask之蓝图
  • (四)React组件、useState、组件样式
  • (四)库存超卖案例实战——优化redis分布式锁
  • (新)网络工程师考点串讲与真题详解
  • (原创)可支持最大高度的NestedScrollView
  • (转) Face-Resources
  • .NET 8.0 发布到 IIS
  • .Net MVC4 上传大文件,并保存表单
  • .net mvc部分视图
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET学习全景图