Mapreduce给出错误转换字符串日期

时间:2014-03-19 16:44:23

标签: java hadoop mapreduce

在mapreduce中,在

中使用Reducer类
public static class Reduce1 extends MapReduceBase implements
    Reducer<Text, Text, Text, Text> {

     public void reduce(input,input,output,output) throws IOException  {
    String fromdate="2014-03-19 20:20:20";
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date startDate=sdf.parse(fromdate);
    }
}

它在编译时给出了以下错误

  

未报告的异常java.text.ParseException;必须被抓住或   宣布被抛出

任何人都知道解决方案以及为什么会出现此错误。

提前致谢

3 个答案:

答案 0 :(得分:0)

您的代码可能会抛出ParseException(例如,如果格式错误)。

你必须将它与IOException一起抛出,或者你可以使用try-catch在方法中手动执行它。

答案 1 :(得分:0)

@libik所说的一般回答是正确的。在您的特定情况下,Reducer的界面指定reduce方法的签名。您不能修改此签名以符合接口。这个问题实际上与mapreduce或Hadoop无关,而是更基本的Java问题。因此,您可能不会从ParseException函数中抛出reduce,因为您的异常条款不允许这样做。所以你有两个选择,你可以抓住ParseException并吞下它或记录它,或者你可以重新抛出包含在IOException或未经检查的RuntimeException中的异常。

try {
    String fromdate = "2014-03-19 20:20:20";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date startDate = sdf.parse(fromdate);
} catch (ParseException ex) {
    throw new IOException(ex);
}

答案 2 :(得分:0)

导入并抛出ParseException。我认为最好初始化Date和SimpleDateFormat以外的reduce方法以节省空间:)

import java.text.ParseException;

public static class Reduce1 extends MapReduceBase implements
    Reducer<Text, Text, Text, Text> {

    private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private Date startDate;
    public void reduce(<...>) throws IOException, ParseException  {
         String fromdate="2014-03-19 20:20:20";
         startDate=sdf.parse(fromdate);
    }
}