递归变量需要类型

时间:2016-04-27 12:59:10

标签: scala apache-spark

我有一个代码,我想更新RDD,如下所示:

val xRDD = xRDD.zip(tempRDD)

这给了我错误:递归值x需要类型

我想在迭代中维护xRDD并在每次迭代中使用tempRDD修改它。我怎样才能实现它?

提前致谢。

2 个答案:

答案 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