【发布时间】:2017-07-26 14:24:01
【问题描述】:
我使用这样的代码来执行一些转换并继续该过程,即使我的价值不高:
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.
你有什么主意吗?
【问题讨论】:
-
如果要遍历Seq,请使用map,
rdd.map { x => x(2) }.collect -
这失败了,因为第一个 Seq 只有 2 个元素
-
感谢您的评论,但这只是一个示例代码。我的真实代码处理非常大的数据,这是一个火花流作业,所以我不能执行收集。
-
collect 是为了展示行为的示例,主要思想是使用 map 而不是 flatMap。
-
如果 seq 没有 3 个元素,那么之后的任何操作都会在映射后出错
标签: scala apache-spark log4j