在我的测试代码中,我有
var rdd = h5read()
rdd=rdd.map(x => f(x._1,x._2))
f定义为
def f(v:Double, k:Int):(Int,Double)={}
h5read定义为
def h5read():RDD[(Double,Int)]{}
当我运行sbt程序集时,为什么会出现此错误:
[error] found : (Int, Double)
[error] required: (Double, Int)
[error] rdd=rdd.map(x => f(x._1,x._2))
答案 0 :(得分:0)
rdd
的返回类型,RDD[(Double, Int)]
的类型被推断为h5read
rdd=rdd.map(f)
时,f
必须包含(Double, Int) => (Double ,Int)
类型,因为map
上已调用RDD[(Double, Int)]
且必须返回 RDD[(Double, Int)]
,因为您正在将其重新分配到rdd
。f
返回其他类型,因此无法将其重新分配到同一rdd
变量中要解决此问题 - 请勿更新rdd
,创建新的var
(或者更好 - 使用val
而不是var
!< / em>的):
val rdd = h5read()
val rdd2 = rdd.map(x => f(x._1,x._2))
如果你真的想重新使用rdd
,你必须给它一个不太具体的类型,但这不是一个好习惯(可变变量和松散的-typed值既是问题的根源,也就是你所看到的问题:
// bad option:
val rdd: RDD[(AnyVal, AnyVal)] = h5read()
rdd = rdd.map(x => f(x._1,x._2))