【发布时间】:2015-06-30 08:16:05
【问题描述】:
我试过了
val tryValues : Iterable[Try[Int]] = ...
val successValues = tryValues.filter(_.isSuccess).map(_.get)
但是编译器会警告 map 可能会抛出异常。 有没有什么方法可以免警告?
【问题讨论】:
标签: scala apache-spark
我试过了
val tryValues : Iterable[Try[Int]] = ...
val successValues = tryValues.filter(_.isSuccess).map(_.get)
但是编译器会警告 map 可能会抛出异常。 有没有什么方法可以免警告?
【问题讨论】:
标签: scala apache-spark
【讨论】:
这里的另一个选择是,如果您不想记录有关失败的任何信息,请在Try 上使用toOption 发送至flatMap。像这样:
val successValues = tryValues.flatMap(_.toOption)
【讨论】:
collect 与RDD 一起使用。它还清楚地表明您正在收集成功。
您想使用collect 模式匹配所有Success 的值,并丢弃其他任何值。
val successValues: List[Int] = tryValues collect { case Success(x) => x }
collect 接受 PartialFunction 作为参数。集合中定义了 PartialFunction 的任何值都将被映射,其余的将被丢弃。
例子:
scala> val tryValues = List(1, 1, 0, 1, 1).map(x => Try(1 / x))
tryValues: List[scala.util.Try[Int]] = List(Success(1), Success(1), Failure(java.lang.ArithmeticException: / by zero), Success(1), Success(1))
scala> val successValues = tryValues collect { case Success(x) => x }
successValues: List[Int] = List(1, 1, 1, 1)
【讨论】: