java udf for adding columns

别说谁变了你拦得住时间么 提交于 2019-12-12 06:09:44

问题


i am writing java udf function to add the pincode by comparing the locality column.here is my code.

  import java.io.IOException;
  import org.apache.pig.EvalFunc; 
  import org.apache.pig.data.Tuple;
  import org.apache.commons.lang3.StringUtils;
  public class MB_pincodechennai extends EvalFunc<String>
  {
    private String pincode(String input)
    {
      String property_pincode = null;
      String[] items = new String[]{"600088", "600016", "600053", "600070", "600040", "600106", "632301", "600109", "600083", "600054", "600023", "600095", "600077", "600073", "600003", "603001", "600064", "600094", "600044", "600008",
      };

      for (String itm : items)
      {
        if (StringUtils.containsIgnoreCase(input, itm))
        {
          property_pincode = itm;
          break;
        }
      }
      return property_pincode;
    }

    public String exec(Tuple input) throws IOException
    {
      if (input == null || input.size() == 0)
        return null;
      try
      {
        String str = (String) input.get(0);
        return pincode(str);
      }
      catch (Exception e)
      {
        return null;
      }
    }
  }

the locality looks like this adyar,tambaram,pallavaram,chromepet...

when i run the above it prints blank values only.i dont know where i am my mistake.any help will be appreciated.


回答1:


if you change the following to return "Invalid Input". then you will get Invalid Input in Pig Console.

catch (Exception e)
{
return null;   // Change this to return "Invalid Input"
}

Reason :

Issue is you are trying to pass pincode=600073 (i.e.Integer) from Pig Script.And you are reading it as String in Java UDF. This casting wont work.

 MB_pincodechennai(pincode) -- pincode is passed as integer.

For this Issue, you have 2 methods ; 1) Either you can have pincode field as String instead of int in pig script.

2) You can or else parse from Integer to String in Java end before doing the match.

String str = Integer.toString(input);

Please have a look at Mapping for more details on handshakes : http://pig.apache.org/docs/r0.11.0/udf.html#udf-java



来源:https://stackoverflow.com/questions/31961582/java-udf-for-adding-columns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!