我有下面的查询,它应该找到列值的平均值并将结果返回给我,它是一个数字。
val avgVal = hiveContext.sql("select round(avg(amount), 4) from users.payment where dt between '2018-05-09' and '2018-05-09'").first().getDouble(0)
我在此声明中面临不一致的行为。这通常会因以下错误而失败,但是通过 Hive 执行时会给出非 NULL 结果。”
18/05/10 11:01:12 ERROR ApplicationMaster: User class threw exception: java.lang.NullPointerException: Value at index 0 in null
java.lang.NullPointerException: Value at index 0 in null
at org.apache.spark.sql.Row$class.getAnyValAs(Row.scala:475)
at org.apache.spark.sql.Row$class.getDouble(Row.scala:243)
at org.apache.spark.sql.catalyst.expressions.GenericRow.getDouble(rows.scala:192)
我使用 HiveContext 而不是 SQLContext 的原因是后者不支持我在代码中广泛使用的一些聚合函数。
你能帮我理解为什么会出现这个问题以及如何解决吗?