我对pig-udf是个新手,尝试了我的第一个。我想评估两列的差异。假设a和b是我的列,我想评估(a-b)
下面是我的javaudf代码
public class GlaasDiff extends EvalFunc<Double> {
@Override
public Double exec(Tuple input) throws IOException {
if(input==null || input.size()!=2){
System.err.println("input passed is either null or not equals two!!");
return null;
}
try{
Double a =(Double) input.get(0);
Double b =(Double) input.get(1);
a = Math.round(a * 100.0) / 100.0;
b = Math.round(b * 100.0) / 100.0;
Double diff= a-b;
Double roundOff = Math.round(diff * 100.0) / 100.0;
return roundOff;
}catch (Exception e){
System.err.println("Failed to process input");
return null;
}
}
}
下面是使用udf的pig脚本
REGISTER hdfs:///user/gadmin/glaas/lib/udf-1.0.jar
A = LOAD 'file' using PigStorage(',') AS (Product,TotalInvoices:float,Approved:float) ;
Final = FOREACH A GENERATE Product,packagname.GlaasDiff(TotalInvoices,Approved);
dump Final;
输出是唯一的产品和空白这样
p1,
p2,
p3,
p4,
然后我尝试了一个使用trim函数的简单示例,比如下面的.java代码
public class GlaasTrim extends EvalFunc<String> {
@Override
public String exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return null;
try{
String str = (String)input.get(0);
getLogger().info(str.trim());
return str.trim();
}catch(Exception e){
System.out.println("Error occured!!!");
return null;
}
}
}
Pig手稿
A = LOAD 'file' using PigStorage(',') AS (Product,TotalInvoices:float,Approved:float) ;
Final = FOREACH A GENERATE packagname.GlaasTrim(Product);
dump Final;
现在我没有得到任何输出。我不知道发生了什么。日志记录也不起作用。我使用的是pig版本0.12.0-cdh5.3.3和java1.7
请帮我解决这个问题。
暂无答案!
目前还没有任何答案,快来回答吧!