java udf不工作

vsikbqxv  于 2021-06-03  发布在  Hadoop
关注(0)|答案(0)|浏览(503)

我对pig-udf是个新手,尝试了我的第一个。我想评估两列的差异。假设a和b是我的列,我想评估(a-b)
下面是我的javaudf代码

  1. public class GlaasDiff extends EvalFunc<Double> {
  2. @Override
  3. public Double exec(Tuple input) throws IOException {
  4. if(input==null || input.size()!=2){
  5. System.err.println("input passed is either null or not equals two!!");
  6. return null;
  7. }
  8. try{
  9. Double a =(Double) input.get(0);
  10. Double b =(Double) input.get(1);
  11. a = Math.round(a * 100.0) / 100.0;
  12. b = Math.round(b * 100.0) / 100.0;
  13. Double diff= a-b;
  14. Double roundOff = Math.round(diff * 100.0) / 100.0;
  15. return roundOff;
  16. }catch (Exception e){
  17. System.err.println("Failed to process input");
  18. return null;
  19. }
  20. }
  21. }

下面是使用udf的pig脚本

  1. REGISTER hdfs:///user/gadmin/glaas/lib/udf-1.0.jar
  2. A = LOAD 'file' using PigStorage(',') AS (Product,TotalInvoices:float,Approved:float) ;
  3. Final = FOREACH A GENERATE Product,packagname.GlaasDiff(TotalInvoices,Approved);
  4. dump Final;

输出是唯一的产品和空白这样

  1. p1,
  2. p2,
  3. p3,
  4. p4,

然后我尝试了一个使用trim函数的简单示例,比如下面的.java代码

  1. public class GlaasTrim extends EvalFunc<String> {
  2. @Override
  3. public String exec(Tuple input) throws IOException {
  4. if (input == null || input.size() == 0)
  5. return null;
  6. try{
  7. String str = (String)input.get(0);
  8. getLogger().info(str.trim());
  9. return str.trim();
  10. }catch(Exception e){
  11. System.out.println("Error occured!!!");
  12. return null;
  13. }
  14. }
  15. }

Pig手稿

  1. A = LOAD 'file' using PigStorage(',') AS (Product,TotalInvoices:float,Approved:float) ;
  2. Final = FOREACH A GENERATE packagname.GlaasTrim(Product);
  3. dump Final;

现在我没有得到任何输出。我不知道发生了什么。日志记录也不起作用。我使用的是pig版本0.12.0-cdh5.3.3和java1.7
请帮我解决这个问题。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题