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

问题复现

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值