[英]Hive UDF - Error in the evaluate() Method
我創建了以下 Java 類並將其添加到 Hive 中,然后用它制作了一個 jar
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;
並得到同樣的錯誤。 有人可以幫我解決這個問題嗎?
嘗試將 Hadoop 的Text
類型替換為簡單的 Java 的String
類型,用於輸入和返回。 對於UDF
類,它工作正常。 如果你想堅持使用Text
我認為你需要初始化你的私有變量t
,例如
private final transient t = new Text()
這是 Hive 的 UDF 的示例代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.