2016-08-22 11 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

キャッチブロックなしでコンパイルしていますが、キャッチは必須ではないと思います。 –

+2

あなたは[何か非常に日を学ぶ](http://stackoverflow.com/questions/1547465/what-does-scalas-try-mean-without-either-a-catch-orfinfin-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)