簡體   English   中英

Hive UDF - 評估()方法中的錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM