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 个选项.. 将 catch 子句添加到周围的 try,将异常添加到现有的 catch 块并用 try/catch 包围..),错误会发生变化.. 但始终是 tehre。

而且我什至不确定我可以改变程序的结构..(方法声明等)..

我该如何解决这个问题。

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

如果你知道猪..或者知道一个简单的方法..那么基本上我要做的是..给定一个“时间,id,金额”类型的输入字符串,检查交易是在一天中的什么时间进行的?

谢谢

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 回答