2016-08-22 151 views
-1

我正在嘗試對輸入數據進行url解碼。很少有記錄解碼正常,但是當我在較大的數據上嘗試這個時,它會給出錯誤。我嘗試了異常處理來丟棄錯誤數據,但一次又一次地得到相同的錯誤。Apache Spark - 異常處理如何在映射函數中工作

val decodedVal = convertedVal22.map(s => doWork(s)) 

def doWork(param : String) : String = 
{ 

    var x9 = "" 
    try { 
    var y = java.net.URLDecoder.decode(param, "UTF-8") 
    x9 = y 
    } 

    return x9 
} 

錯誤:

URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "%2" 
+0

你的'catch'塊在哪裏?這不應該編譯。 –

+0

這是編譯沒有catch塊,我不認爲趕上是強制性的。 –

+2

你[很快學會了一些東西](http://stackoverflow.com/questions/1547465/what-does-scalas-try-mean-without-either-a-catch-or-finally-block)。如果沒有「catch」塊,你不會捕捉任何異常。 –

回答

0

運行時異常需要在catch塊。

def doWork(param : String) : String = { 
var x9 = "" 
try { 
    var y = java.net.URLDecoder.decode(param, "UTF-8") 
    x9 = y 
    return x9 
} 
catch { 

      case runtime: RuntimeException => 
      { 
       "" 
      } 
} 

並且用nonEmpty過濾它。

val decodedVal = convertedVal22.map(s => doWork(s)).filter(_.nonEmpty)