在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;必须被抓住或 宣布被抛出
任何人都知道解决方案以及为什么会出现此错误。
提前致谢
答案 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);
}
}