0

地域列を比較してピンコードを追加する 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;
      }
    }
  }

地域は、この adyar、tambaram、pallavaram、chromepet のように見えます...

上記を実行すると、空白の値のみが出力されます。どこが間違っているのかわかりません。助けていただければ幸いです。

4

1 に答える 1

1

以下を変更して「無効な入力」を返す場合。その後、Pig Console で無効な入力が表示されます。

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

理由 :

問題は、Pig Script から pincode=600073 (ieInteger) を渡そうとしていることです。Java UDF で文字列として読み取っています。このキャスティングは機能しません。

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

この問題には、2 つの方法があります。1) ピッグ スクリプトで int の代わりに文字列として pincode フィールドを持つことができます。

2)一致を行う前に、Java側で整数から文字列に解析することができます。

String str = Integer.toString(input);

ハンドシェイクの詳細については、マッピングをご覧ください: http://pig.apache.org/docs/r0.11.0/udf.html#udf-java

于 2015-08-12T20:24:30.343 に答える