解决Spark 1.4.1中SUM为null的列返回0的问题 2015-07-16 05:43:00 常规的SQL中,执行SUM函数时,如果一列全为null,那么SUM应该返回null,不过在Spark 1.4.0 ~ 1.4.1版本中(目前的最新版本),SUM为null的列返回0,Spark 1.3.x中没有这个问题,我在Spark社区提过这个问题,给的解释是为了规避Hive的一个问题,估计要在Spark 1.5的版本中才能解决。 <http://apache-spark-developers-list.1001551.n3.nabble.com/SparkSQL-1-4-0-The-result-of-SUM-xxx-in-SparkSQL-is-0-0-but-not-null-when-all-data-in-column-xxx-arel-td13008.html> ## 解决方案 修改`sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregates.scala`, 定位到621行,将以下代码: ``` private val addFunction = Coalesce(Seq(Add(Coalesce(Seq(sum, zero)), Cast(expr, calcType)), sum, zero)) ``` 修改为: ``` private val addFunction = Coalesce(Seq(Add(Coalesce(Seq(sum, zero)), Cast(expr, calcType)), sum)) ``` 重新编译代码就好了。 非特殊说明,均为原创,原创文章,未经允许谢绝转载。 原始链接:解决Spark 1.4.1中SUM为null的列返回0的问题 赏 Prev Spark 1.4.1解决重新创建Parquet数据表后无法执行查询的问题 Next 解决SparkSQL 1.3 ~ 1.4 saveAsTable默认保存到default数据的问题