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

Creating, adding and using a UDF in Hive

我已经将示例 UDF 写入 TRIM 来自配置单元中 table 的字符串:

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

有人可以帮忙吗?提前致谢!

hive UDF 必须包含名为 evaluate 的函数。将名为 trim 的函数重命名为 evaluate

public Text evaluate(Text incomingData)

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

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