我创建了下面的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;
也犯了同样的错误。有人能帮我吗?
1条答案
按热度按时间lmyy7pcs1#
尝试替换hadoop的
Text
用简单的java输入String
输入和返回的类型。为了UDF
上课,它很好用。如果你想坚持Text
我想你需要初始化你的私有变量t
,例如。下面是hive的udf的示例代码。