1、报错信息如下:
java.lang.NullPointerException at org.apache.spark.sql.execution.datasources.orc.OrcColumnVector.getUTF8String
2、背景:
由于表存储数据用textfile的时候,因为分隔符的问题导致数据会被切分紊乱,导致有很多null的数据存储,所以使用orc的格式存储数据。数据写入完成之后,使用spark sql查询报上面的错。
3、解决办法:
设置参数:set spark.sql.hive.convertMetastoreOrc=false
这个参数默认是true,spark操作orc表数据的时候,默认使用的是内置orc reader和 orc writer,替代hive会有不兼容的情况,所以设置以上参数就成功了。
注意:目前我是在大数据平台中运行的sql,set spark.sql.hive.convertMetastoreOrc=false和业务sql在一个会话中执行,所以参数只会在当前会话中生效。