我已经从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
有些人可以帮忙吗?提前谢谢!
答案 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