在Hive中创建,添加和使用UDF

时间:2015-09-06 11:39:47

标签: java hadoop mapreduce hive hbase

我已经从hive中的表中写了一个样本UDF来TRIM一个字符串:

package anoop;


import org.apache.hadoop.hive.ql.exec.UDF;

import org.apache.hadoop.io.Text;

public class DataTrim  extends UDF{

String trimmed;

public Text trim(Text incomingData){

    trimmed= incomingData.toString().trim();

    return new Text(trimmed);
}


}

我为这个“trim_string.jar”创建了一个jar并将其保存到hive lib文件夹中。 现在我跑了以下:

add jar '~/hive-1.2.1/lib/trim_string.jar';  (success)

现在我跑

 create temporary function trimmed1 as 'anoop.DataTrim';

但是我收到了以下错误:

FAILED: Class anoop.DataTrim does not implement UDF, GenericUDF, or UDAF
FAILED: Execution Error, return code 1 from     org.apache.hadoop.hive.ql.exec.FunctionTask
有些人可以帮忙吗?提前谢谢!

1 个答案:

答案 0 :(得分:3)

配置单元UDF必须包含名为evaluate的函数。将名为trim的函数重命名为evaluate

  

public Text evaluate(Text incomingData)

注意String trimmed作为类成员是不必要的。您可以将其移动为局部变量。

package anoop;


import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class DataTrim  extends UDF{

    public Text evaluate(Text incomingData){
        String trimmed;
        trimmed= incomingData.toString().trim();
        return new Text(trimmed);
    }


}

有关详细信息,请参阅此tutorial