当前位置: 首页 > 工具软件 > OpenX > 使用案例 >

org.openx.data.jsonserde.JsonSerDe处理NULL时的坑

费学
2023-12-01

问题复现

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是可以接受的

 类似资料: