我有一个代码,我想更新RDD,如下所示:
val xRDD = xRDD.zip(tempRDD)
这给了我错误:递归值x需要类型
我想在迭代中维护xRDD并在每次迭代中使用tempRDD修改它。我怎样才能实现它?
提前致谢。
答案 0 :(得分:3)
编译器告诉您,您正在尝试使用自身定义变量,并在动作中使用它自己的定义。换句话说,你试图使用动作中不存在的东西来定义它。
修改强>:
如果你有一个产生新RDD的动作列表,你想要拉链,也许你应该看一下折叠:
listMyActions.foldLeft(origRDD){ (rdd, f) =>
val tempRDD = f(rdd)
rdd.zip(tempRDD)
}
答案 1 :(得分:2)
不要忘记val
是不可变的,这意味着您无法将某些内容重新分配给先前定义的变量。但是,如果您要执行此操作,则可以将其替换为var
,这是不推荐的,此问题与Scala
的功能更相关,而不是Apache-Spark
的问题。此外,如果您想了解更多信息,可以参考这篇文章Use of def val and vars in scala。