2016-08-22 152 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)