spark-sql读取不到parquet格式的hive表

32 篇文章 0 订阅

情况一:

当向Hive metastore中读写Parquet表时,Spark SQL将使用Spark SQL自带的Parquet SerDe(SerDe:Serialize/Deserilize的简称,目的是用于序列化和反序列化),而不是用Hive的SerDe,Spark SQL自带的SerDe拥有更好的性能。这个优化的配置参数为spark.sql.hive.convertMetastoreParquet,默认值为开启。

所以有时会发生spark自带的序列化方式无法解析hive中的parquet数据,便读不到数据,此时可以将这个参数设置为false。

SET spark.sql.hive.convertMetastoreParquet = false;

情况二:

 当使用spark-shell 或者spark api(e.g. saveAsTable) 创建Hive表时,在修改表结构是,可能会出现spark读取数据字段为null 的情况。

--- 方案一:
1. spark-shell/shive 删除表,再建表 
2. 除分区字段外其他表再建表语句中都是大写/小写,根据最初见表决定
3. Map Array filter null

--- 方案二:
1. hive drop 表, 再建表
2. spark-shell/shive 修复分区
3. hive 修复分区

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值