簡體   English   中英

java udf用於添加列

[英]java udf for adding columns

我正在編寫Java udf函數以通過比較位置列來添加密碼。這是我的代碼。

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

這個地方看起來像這個阿達亞爾,坦巴拉姆,帕拉瓦拉姆,chromepet ...

當我運行上面的命令時,它僅打印空白值。我不知道我在哪里。任何幫助將不勝感激。

如果更改以下內容以返回“無效輸入”。 那么您將在Pig控制台中看到無效輸入。

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

原因:

問題是您試圖從Pig腳本傳遞pincode = 600073(即Integer),並且在Java UDF中將其讀取為String。 這種鑄造將無法正常工作。

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

對於本期,您有2種方法; 1)您可以在pin腳本中將pincode字段設置為String而不是int。

2)在進行匹配之前,您可以將Java末尾從Integer解析為String。

String str = Integer.toString(input);

請查看“映射”以獲取有關握手的更多詳細信息: http : //pig.apache.org/docs/r0.11.0/udf.html#udf-java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM