在火花上发现错误

时间:2017-07-26 14:24:01

标签: scala apache-spark log4j

我使用这样的代码执行一些转换并继续进程,即使我的值不好:

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. 你有什么主意吗?

1 个答案:

答案 0 :(得分:1)

您可以使用SuccessFailure对其进行评估,并以此方式创建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
    }
}
相关问题