我有两个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)
的答案并没有给出
回原始答案)。
我注意到Impala 1.2.4中的length(myUDF("myInput"))
是错的。每行+1。然后再次
在Hive和Impala(版本2.1)的情况下它是正确的
所以,我假设附加了一些额外的(特殊)字符
在Impala 1.2.4的myUDF
输出结束时(恰好在最后
从UDF函数返回的Text
数据类型。)
我在Cpp中为Impala 1.2.4构建了一个类似的UDF,它可以正常工作。
所有这些问题都在Impala 2.1中解决,但我不能解决 将我的群集升级到它。
那么我该如何解决这个错误?
答案 0 :(得分:1)
这是IMPALA-1134,已在Impala 2.1中修复。问题是以错误的方式复制返回的值,以便在字符串末尾返回一些额外的内存。以前我们使用getBytes()表示只有getLength()
之前的数据才有效。我认为可以尝试对输出中的实际长度进行编码,然后在反转函数中,采用实际长度并仅使用有效部分。然而,这似乎相当棘手。我强烈建议找到一种方法来升级到最新版本的Impala,因为自1.4以来有很多错误修复。