值查找不是org.apache.spark.rdd.RDD

时间:2017-10-15 14:55:03

标签: scala apache-spark rdd

这是我的整个示例代码:

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);

任何人都可以帮我纠正这个错误

1 个答案:

答案 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);
}