【发布时间】:2018-07-13 16:46:32
【问题描述】:
我正在使用 Scala Spark API。在我的代码中,我有一个如下结构的 RDD:
Tuple2[String, (Iterable[Array[String]], Option[Iterable[Array[String]]])]
我需要处理(执行验证和修改值)RDD 的第二个元素。我正在使用map 函数来做到这一点:
myRDD.map(line => mappingFunction(line))
不幸的是,mappingFunction 没有被调用。这是映射函数的代码:
def mappingFunction(line: Tuple2[String, (Iterable[Array[String]], Option[Iterable[Array[String]]])] ): Tuple2[String, (Iterable[Array[String]], Option[Iterable[Array[String]]])] = {
println("Inside mappingFunction")
return line
}
当我的程序结束时,标准输出中没有打印消息。
为了调查问题,我实现了一个有效的代码 sn-p:
val x = List.range(1, 10)
val mappedX = x.map(i => callInt(i))
并调用了以下映射函数:
def callInt(i: Int) = {
println("Inside callInt")
}
请协助调用 RDD 映射函数mappingFunction。谢谢。
【问题讨论】:
-
您是否在地图之后调用了诸如收集之类的操作? Spark 懒惰地执行转换。您的示例 sn-p 有效,因为它是本地集合且没有 RDD。
-
@SteffenSchmitz 不,我没有调用收集。在您的建议和
mappingFunction被调用后,我这样做了。谢谢你的帮助 -
转换操作应始终紧随其后。 count() 是实现您的转换的操作。
标签: scala apache-spark rdd