hive在使用org.openx.data.jsonserde.JsonSerDe对json格式的数据进行解析时,会将NULL【空值】转成字符串"null",导致数据解析异常,例如:
{a:123,b:null}
会被解析成为:
{a:123,b:"null"}
1.下载源代码,链接
2.将项目中出现 “null” 全部替换成 null【此处需要注意,CSDN自动将英文状态下的"转成了中文状态下的“】
3.将/json/src/main/java/org/openx/data/jsonserde/json/JSONObject.java中的
if (string.equalsIgnoreCase("null")) {
return JSONObject.NULL;
}
改成
if (string.equalsIgnoreCase("null")) {
return null;
}
4.重新编译并跳过测试,mvn package -Dmaven.test.skip=true
5.替换线上hive的jar包
建议直接使用原包名进行替换,免得修改hive配置
/usr/hdp/3.1.5.0-152/hive/auxlib/json-serde-1.3.8-jar-with-dependencies.jar
/usr/lib/presto/lib/plugin/hive-hadoop2/json-serde-1.3.8-jar-with-dependencies.jar
重启hive服务、presto服务
1.以上仅适合读取json数据,写入未做测试
2.会将value为null的key丢弃,对于大部分场景,丢弃value为空的key是可以接受的