Uive UDF - Ошибка в методе оценки () - PullRequest
0 голосов
/ 28 января 2019

Я создал следующий класс 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 голосов
/ 29 января 2019

Попробуйте заменить тип Hadoop Text на простой тип Java String для ввода и возврата.Для класса UDF все работает нормально.Если вы хотите придерживаться Text, я думаю, вам нужно инициализировать вашу личную переменную t, например,

private final transient t = new Text()

Вот пример кода UDF Hive.

...