0

私はJavaの世界に不慣れです。しかし、基本的には、pig-latinでユーザー定義関数を作成しようとしています。

以下は関連するコードです。

public class time extends EvalFunc<String>{

public String exec(Tuple input) throws IOException {

    if ((input == null) || (input.size() == 0))
        return null;
    try{
        String time = (String) input.get(0) ;
        DateFormat df = new SimpleDateFormat("hh:mm:ss.000");
        Date date = df.parse(time);
        String timeOfDay = getTimeOfDay(date);
        return timeOfDay;
    } catch (IOException e) {
        throw e;
    }

}

つまり、基本的に入力はタプルです...タプルが空かどうかをチェックします。次に、その日付文字列を時間オブジェクトに変換します。次に、時間部分を解析します。次に、関数

  getTimeOfDay(date) returns a string... like breakfast, lunch dinner.. or empty string depending on the time hours..

今の問題は、私の日食が言って、エラー(赤い線)が

 Date date = df.parse(time);
 String timeOfDay = getTimeOfDay(date);

言う

 Unhandled exception type ParseException

しかし、何を試しても(3つのオプションがあります。周囲のtryにcatch句を追加し、既存のcatchブロックに例外を追加し、try / catchで囲みます。)、エラーはシフトしますが、常にtehreです。

そして、プログラムの構造(メソッド宣言など)を変更できるかどうかさえわかりません。

これを解決するにはどうすればよいですか。

  A quick guide on udf http://wiki.apache.org/pig/UDFManual

あなたが豚を知っているか、簡単な方法を知っているなら、基本的に私がやろうとしていることは、トランザクションが行われた日の何時に「time、id、amount」タイプの入力文字列をチェックすることです。

ありがとう

4

1 に答える 1

1
  • execメソッドがIOExceptionをスローするようにすでに宣言されている場合は、throws宣言によって自動的に実行されるため、それをキャッチしてスローする必要はありません。
  • ParseExceptionに関しては、それを処理する方法を決定する必要があります。
  • また、角かっこがありませんでした=)

したがって、コードは次のようになります。

public class time extends EvalFunc<String>{

public String exec(Tuple input) throws IOException {

    if ((input == null) || (input.size() == 0))
        return null;
    try{
        String time = (String) input.get(0) ;
        DateFormat df = new SimpleDateFormat("hh:mm:ss.000");
        Date date = df.parse(time);
        String timeOfDay = getTimeOfDay(date);
        return timeOfDay;
    } catch (ParseException e) {
        //how will I handle when df.parse(time) fails and throws ParseException?
        //maybe:
        return null;
    }
  } //exec

} //class
于 2012-10-25T20:19:27.870 に答える