Java UDF无法正常工作

时间:2015-08-13 13:29:38

标签: hadoop apache-pig cloudera-cdh udf

我是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

请帮我解决这个问题。

0 个答案:

没有答案