Hive UDF-评估()方法中的错误

时间:2019-01-28 10:19:43

标签: java hive hive-udf

我创建了以下Java类,并用它制作了一个罐子之后将其添加到Hive中。

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class MakeCap extends UDF{
  private Text t;

  public Text evaluate(Text input){
    if(null==input){
      t.set("Invalid input");
    }else{
      t.set(input.toString().toUpperCase());
    }
    return t;
  }
}

接下来,我创建了一个临时函数

CREATE TEMPORARY FUNCTION CAP AS 'com.iris.MakeCap';

但是当我跑步

SELECT CAP('hello');

我收到以下错误

Error: Error while compiling statement: FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments ''hello'': org.apache.hadoop.hive.ql.metadata.HiveException: 
Unable to execute method public org.apache.hadoop.io.Text com.iris.MakeCap.evaluate(org.apache.hadoop.io.Text) 
with arguments {hello}:null (state=42000,code=10014)

我尝试使用String代替Text作为evaluate()的参数类型,但是得到了相同的结果。然后我也尝试了这个

SELECT CAP(e.name) FROM default.emp e;

,并得到相同的错误。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

尝试将Hadoop的Text类型替换为简单Java的String类型,以用于输入和返回。对于UDF类,它可以正常工作。如果您想坚持使用Text,我认为您需要初始化私有变量t,例如

private final transient t = new Text()

这里是Hive的UDF的example code

相关问题