将List传递给Spark的parallelize()方法会产生编译问题

时间:2017-08-05 18:14:54

标签: scala apache-spark

我是Scala的新手并尝试从学习Spark 执行以下代码。

object BasicAvg {
    def main(args: Array[String]) {
         val master = args.length match {
                case x: Int if x > 0 => args(0)
                case _ => "local"
          }
          val sc = new SparkContext(master, "BasicAvg", System.getenv("SPARK_HOME"))
          val input = sc.parallelize(List(1,2,3,4), 2)
          val result = computeAvg(input)
            val avg = result._1 / result._2.toFloat
            println(result)
     }
     def computeAvg(input: RDD[Int]) = {
          input.aggregate((0, 0))((x, y) => (x._1 + y, x._2 + 1),
                (x,y) => (x._1 + y._1, x._2 + y._2))
     }
}

问题:

声明

val input = sc.parallelize(List(1,2,3,4), 2)

在编译代码时给出了以下异常。

No ClassTag available for Int   BasicAvg.scala  /SparkExamples/src/main/scala/sql   line 19 Scala Problem
not enough arguments for method parallelize: (implicit evidence$1: scala.reflect.ClassTag[Int])org.apache.spark.rdd.RDD[Int]. Unspecified value parameter evidence$1.   BasicAvg.scala  /SparkExamples/src/main/scala/sql   line 19 Scala Problem

但是当我将语句修改为

val input = sc.parallelize(1 to 4, 2)

它工作正常。

我无法理解问题所在。

谢谢!!!

0 个答案:

没有答案