我是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)
它工作正常。
我无法理解问题所在。
谢谢!!!