2014-03-19 34 views
0

在MapReduce的,在的MapReduce給錯誤轉換字符串日期

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 follwing錯誤;必須被捕獲或 宣稱拋出

任何人都知道解決方案,爲什麼這個錯誤即將到來。

在此先感謝

+0

'ParseException'是經過檢查的異常,所以你需要趕上已經或者扔掉它通過錯誤信息表示... – Reimeus

回答

0

您的代碼可以拋出ParseException(例如,如果你有不良格式)。

而且你必須把它拋出IOException,或者你可以使用try-catch在方法內部手動執行某些操作。

+0

我已經嘗試拋出ParseException到redcuer方法,但它不工作。 –

0

@libik說的一般答案是正確的。在您的具體情況下,Reducer的接口指定了reduce方法的簽名。您不得修改此簽名以符合界面。這個問題實際上並不是專門與mapreduce或Hadoop相關的,而是更基本的Java問題。所以你不可以從你的reduce函數中拋出ParseException,因爲你的異常條款不允許這樣做。因此,您有兩種選擇,您可以捕獲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); 
} 
0

導入並拋出ParseException。而且我認爲它能夠更好地初始化日期和SimpleDateFormat的減少以外的方法來節省空間:)

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); 
    } 
} 
相關問題