hive udf-evaluate()方法中的错误

yyyllmsg  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(585)

我创建了下面的java类,并在制作了一个jar之后将其添加到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;

也犯了同样的错误。有人能帮我吗?

lmyy7pcs

lmyy7pcs1#

尝试替换hadoop的 Text 用简单的java输入 String 输入和返回的类型。为了 UDF 上课,它很好用。如果你想坚持 Text 我想你需要初始化你的私有变量 t ,例如。

private final transient t = new Text()

下面是hive的udf的示例代码。

相关问题