spark2.2升级spark2.4遇到的bug

一直以来spark社区是非常活跃的开源社区,版本跟新迭代速度相当的快。有的时候大版本更新时间速度快到怀疑人生,第一次感觉到学习速度跟不上更新速度,是在spark1.6更新到spark2.0,两个版本几乎没有间隔多久。也一度怀疑自己已经老了,吃不动这碗饭了。

回归正题,spark官方版本更新速度比较快本身是一件很好的事情,能够快速修复已经提交的bug,新的性能优化方案和技术方向可以很快在新版本上得到实现。在向下兼容性上做的也很好,小版本之间在API上基本上没有什么很大的变更。但是,还是会有漏网之鱼,让你在满心欢喜的升级spark版本过程中,给你沉重一击。导致在旧版本上正常运行的代码,在新版本上直接无法运行。由于spark开源社区的严谨性,这种bug真的是可遇而不可求,碰到一个这样的bug并且解决掉,让一件非常有趣的事情。今天讲述的这个bug就是这一类问题。

今天我们讲述的这个bug是和UDF和UDAF相关的一个spark版本差异导致的bug。

众所周知,在scala开发过程中数据结构Map的key是可以为空的,但是在spark SQL中的数据结构Map是不能为空的。如果在spark SQL中数据结构Map的key为空,在计算过程会提示如下错误:

java.lang.RuntimeException: Cannot use null as map key

这个提示能够很容易,让开发者定位到bug位置以及引起bug的原因。

但是在如下场景中就不会又这么友好的提示:

    1.Spark UDF 返回Map类型,其中map的key包含null

    2.Spark UDAF 其中bufferSchema或者返回结果为Map类型,其中map的key出现null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值