【问题标题】:Creating, adding and using a UDF in Hive在 Hive 中创建、添加和使用 UDF
【发布时间】:2015-09-06 11:39:47
【问题描述】:

我已经编写了一个示例 UDF 来从 hive 中的表中修剪一个字符串:

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

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

【问题讨论】:

    标签: java hadoop mapreduce hive hbase


    【解决方案1】:

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

    公共文本评估(文本传入数据)

    注意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

    【讨论】:

    • 嗨,我尝试使用上面的代码,但现在我收到错误:FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments 'preciptotal': No matching method for class anoop.DataTrim与(字符串)。可能的选择:.............................我使用的命令是:select trimmed1(skyconds) from hourlydata limit 10; trimmed1 是创建的临时函数。请帮忙。
    • 嗨。似乎我没有正确创建 JAR。我使用上面的代码重新创建了它。现在完美运行。!非常感谢您的帮助!
    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多