用于添加列的java udf

时间:2015-08-12 09:44:01

标签: java apache-pig udf

我正在编写java udf函数,通过比较locality column来添加pincode。这是我的代码。

  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;
      }
    }
  }

该地区看起来像这样的adyar,tambaram,pallavaram,chr​​omepet ......

当我运行上面它只打印空白值。我不知道我在哪里我的错误。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果更改以下内容以返回“无效输入”。然后你将在猪控制台中获得无效输入。

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

原因:

问题是你试图从Pig Script传递pincode = 600073(ieInteger)。你正在Java UDF中将它作为String读取。这个演员不会工作。

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

对于本期,您有两种方法; 1)你可以在猪脚本中将pincode字段作为String而不是int。

2)在进行匹配之前,你可以或者在Java端解析从Integer到String。

String str = Integer.toString(input);

有关握手的详细信息,请查看映射: http://pig.apache.org/docs/r0.11.0/udf.html#udf-java