这是我的整个示例代码:
package trouble.something
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
object Stack {
val conf = new SparkConf().setMaster("local[*]").setAppName("app")
val sc = new SparkContext(conf)
def ExFunc[Int](looku: RDD[(Int, Long)]) {
val ke = 3
looku.lookup(ke);
}
def main(args: Array[String]){
val pi: RDD[(Int, Long)] = sc.parallelize(Seq((1, 9L), (2, 11L)))
pi.lookup(3)
val res = ExFunc[Int](pi)
}
}
当我执行以下行时,它正确执行而没有任何错误并产生输出
pi.lookup(3)
但是,当我将pi
传递给某个函数并使用lookup
如下所示时,我会收到错误
val res = ExFunc[Int](pi)
将pi
传递给功能
def ExFunc[Int](looku: RDD[(Int, Long)]) {
val ke = 3
looku.lookup(ke);
}
然后我收到此错误消息:
Error:(27, 11) value lookup is not a member of org.apache.spark.rdd.RDD[(Int, Long)]
looku.lookup(ke);
任何人都可以帮我纠正这个错误
答案 0 :(得分:4)
该功能不应该是通用的。只需删除类型参数
即可def ExFunc(looku: RDD[(Int, Long)]) {
val ke = 3
looku.lookup(ke);
}
创建通用函数提供ClassTag
,例如
import scala.reflect.ClassTag
def ExFunc[T : ClassTag](looku: RDD[(T, Long)], ke: T) {
looku.lookup(ke);
}