2015-09-06 97 views
0
使用UDF

我已经写了一个样本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”并将其保存到配置单元库文件夹。 现在我跑了以下内容:

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 

可以请一些帮助?提前致谢!

回答

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

+0

嗨, 我试着用上面的代码,但现在我得到错误: 失败:SemanticException [错误10014]:第1行:7周错误的论点“preciptotal ':没有与(字符串)类anoop.DataTrim匹配的方法。可能的选择:.......................... 我使用的命令是:从小时数限制10中选择trimmed1(skyconds); trimmed1是创建的临时函数。 请帮忙。 –

+0

嗨。似乎我没有正确创建JAR。我使用上面的代码重新创建了它。现在完美。非常感谢帮助! –