spark decimal列进行计算时,可能会丢失精度
spark.sql.decimalOperations.allowPrecisionLoss 在默认情况下配置为:true
这将会会导致精度丢失的列展示为null
一般情况下,修改spark配置即可解决,即将其配置为:false
即:set spark.sql.decimalOperations.allowPrecisionLoss = false
但是,也有特殊情况
比如在如下例子中,还会出现结果列为null的情况:
IF(column1 IS NULL,0,column1) - IF(column2 IS NULL,0,column2)
语法:IF(column1 is null,column2,column3)
函数逻辑: 如果第一个表达式为true,返回column2,否则返回column3
去掉多余的IF判断,就能正常获取结果:column1 - column2
特殊情况特殊对待就好~