我在 Java 中有两个 Hive UDF,它们在 Hive 中运行良好。
这两个功能是相互补充的。
String myUDF(BigInt)
BigInt myUDFReverso(String)
myUDF("myInput")
给出一些输出,什么时候myUDFReverso(myUDF("myInput"))
应该回馈myInput
这在 Hive 中有效,但是当我尝试在 Impala(1.2.4 版)中使用它时,它给出了预期的答案myUDF(BigInt)
(打印的答案是正确的),但传递给的答案myUDFReverso(String)
不会返回原始答案)。
我注意到length(myUDF("myInput"))
在 Impala 1.2.4 中是错误的。每行都是+1。在 Hive 和 Impala(2.1 版)的情况下也是正确的
myUDF
因此,我假设在 Impala 1.2.4的输出末尾附加了一些额外的(特殊)字符(正好在Text
从 UDF 函数返回的数据类型的末尾)。
我在 Cpp 中为 Impala 1.2.4 构建了一个类似的 UDF,它可以正常工作。
所有这些问题都在 Impala 2.1 中得到解决,但我无法将集群升级到它。
那么我该如何解决这个错误呢?