【发布时间】:2017-11-06 09:50:29
【问题描述】:
在 E. Capriolo 等人的 Programming Hive 第 168 页上,它指出“......在 Java 中,原语不是对象,不能为空。”所以,对于简单的 Hive UDF:
public class ConvertToCelcius extends UDF {
public double evaluate(double value) {
return (value - 32) / 1.8;
}
}
如果遇到空行值会怎样?
另外,使用 Java 原语我们如何测试是否将 null 传递给我们的 UDF?
大概,我们可以将上面的内容改写为:
public class ConvertToCelcius extends UDF {
public Double evaluate(Double value) {
if (value == null) {
return null;
}
return (value - 32) / 1.8;
}
}
【问题讨论】:
-
"如果遇到空行值会怎样?" => 编译错误 - 不可能这样做。除非您通过
Double,否则您将获得 NPE。 -
编译错误还是运行时错误?上面带有“double”的代码编译得很好。
-
我的意思是你不能在第一种方法上调用
evaluate(null):编译错误。如果你在运行时传递一个Double d = null,你会得到一个 NullPointerException。 -
这是我问题的重点。 "evaluate(double value)" 编译得很好,可以打包到 jar 中并在脚本中使用,但是当传递空值时会发生什么?那是“双”而不是“双”。使用“double”类型是完全有效和合法的。
标签: java hive user-defined-functions