我使用这样的代码执行一些转换并继续进程,即使我的值不好:
import scala.util.Try
val data = Array(Seq(1, 2), Seq(3, 4, 5))
val rdd = sc.parallelize(data)
val rdd_test = rdd.flatMap(x => Try(x(2)).toOption)
rdd_test.collect.foreach(println)
这个简单的代码返回5,因为在我的第一行中,我在第三个位置没有任何价值。我的问题是如何捕获第一行以使用log4j来记录警报消息。我想说的是:Index Error.
你有什么主意吗?
答案 0 :(得分:1)
您可以使用Success
和Failure
对其进行评估,并以此方式创建Option
:
rdd.flatMap{x =>
val resTry = Try(x(2))
resTry match {
case Success(res) => Some(res)
case Failure(e) => logger.error("Error: " + Throwables.getStackTraceAsString(e))
None
}
}