könnten Sie Either
myRDD.map(line=> if (condition) Left("some Error") else Right(somevalue))
.collect { case Right(v) => v }
verwenden Daraus ergibt sich ein Ergebnis, was in den erfolgreichen Zuordnungen war. Aber Sie wollen wahrscheinlich etwas mit den Fehlern tun, wenn Sie den obigen Code verwenden (beispielsweise mit einem partition { }
Wenn nicht die Option
Ansatz verwenden.
Oder nutzen Sie eine einfache Option
:
myRDD.map(line=> if (condition) None else Some(somevalue))
.flatten()
Wenn Sie wollte kombinieren letzte Option mit Ihrem Try
, verwenden sie so etwas wie
myRDD.map(line=> Try{
/*something dangerous*/
if (condition) None else Some(somevalue)
})
.collect{ case Success(r) => r } // successful results
.flatten() // flatten out the Nones
IMHO (und viele andere), unterlassen, sich Ausnahmen in scala zu werfen. ich sehe sie als Phantasie goto-Anweisungen th Springen Sie nicht innerhalb einer Dimension durch Code, sondern durch verschiedene Dimensionen (d. h. den Stapel). Sie sind Teil der Java-Plattform, daher müssen wir mit ihnen umgehen, wenn wir auf Java-Code zugreifen (außerdem müssen Sie möglicherweise etwas werfen, wenn Sie etwas erstellen, das von Java-Entwicklern verwendet wird)
Verwenden Sie das Schlüsselwort throw? –
Welche Ausnahme soll ich werfen? – Bob