我是Pig UDF的新手,并尝试了我的第一个。我想评估两个列的差异。我的A和B是我的专栏,我想评估(A-B)
以下是我的Java UDF代码
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的猪脚本
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,
然后我尝试了一个简单的例子来使用像this.Java代码
这样的trim函数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;
}
}
}
猪脚本
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和Java 1.7
请帮我解决这个问题。