spark 2.1 读取parquet外部表返回null

来源:互联网 发布:成都大数据产业研究院 编辑:程序博客网 时间:2024/06/03 04:07

背景

通过spark2.1读取hive外部表部分字段返回都为null

原因

外部表数据使用parquet文件存储,parquet文件列名是大小写敏感的,而hive metastore 的信息都是以小写的形式存储。

在2.1版本以前spark-sql会对parquet的列名作小写处理

这里写图片描述

2.1更新中在下面的jira中进行了删除:

https://issues.apache.org/jira/browse/SPARK-18333

解决办法:

  1. 将所有的字段名改为小写
    列名多个单词间使用下划线分割而不是驼峰式。

  2. 使用hive的SerDe
    设置spark.sql.hive.convertMetastoreParquet=false,使用hive的SerDe,会带来一些性能损失只能作为临时方案。

  3. 修改源码
    维护麻烦

  4. 使用内部表

原创粉丝点击