我在foreach
操作中遇到了一些问题:程序永远不会完成,并且它就像在这一行上陷入僵局一样。
这是程序所依赖的代码行,我将为rddData
的每个元素打印rddUserData
的第一个元素:
rddUserData.foreach( r => println(trasformToIndexed().lookup(0)(0)._2.toDouble))
这是函数trasformToIndex
:
def trasformToIndexed(): RDD[(Long, ((String, String), Int))] = {
val withIndex = rddData.zipWithIndex()
val indexKey = withIndex.map{case (k,v) => (v,k)}
indexKey
}
我也尝试过这种方式,不使用zipWithIndex
,但将rdd转换为列表然后获取第一个元素,但它也不起作用:
rddUserData.foreach( r => println(rddData.collect().toList(0)._2).toDouble)
实现目标的唯一方法是遍历rddUserData
到for statement
并执行相同的操作。
val listReaction = rddUserData.collect().toList
for(i<-0 to listReaction.size-1){
println(println(rddData.collect().toList(0)._2).toDouble)
}
但是,我想用foreach
声明来解决它。
答案 0 :(得分:0)
我的问题是rddData
foreach
rddUserData
内rddData
的访问权限。
显然,这在闭包内是不可能的。
无论如何,我在这里发布我的解决方案:
foreach
; val map = rddData.collect().toMap rddUserData.foreach( println(rddData.get("someKey")).toDouble)
get函数返回Some对象,因此需要打开它。