在impala 1.2.4中使用HiveUDF会产生错误的结果

dxxyhpgq  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(410)

我有两个java的hiveudf,它们在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中的impala1.2.4构建了一个类似的udf,它工作正常。
所有这些问题在impala2.1中都得到了解决,但我无法将集群升级到impala2.1。
那么我该如何解决这个问题呢?
参考文献:http://www.cloudera.com/content/cloudera/en/documentation/cloudera-impala/v1/v1-2-4/installing-and-using-impala/ciiu_udf.html
xtupzzrd

xtupzzrd1#

这是 Impala -1134,它被固定在 Impala 2.1中。问题是返回值的复制方式不对,因此可能会在字符串末尾返回一些额外的内存。以前我们使用的getbytes()只表示 getLength() 是有效的。我认为可以尝试在输出中编码实际长度,然后在反转函数中,取实际长度,只使用有效部分。然而,这似乎相当棘手。我强烈建议找到一种方法升级到impala的最新版本,因为从1.4开始有很多错误修复。

相关问题