我正在尝试执行Spark编程指南中提供的示例。 https://spark.apache.org/docs/1.1.0/sql-programming-guide.html
但我面临编译错误。 (我是斯卡拉新手)
以下是我的代码:
import org.apache.spark.{SparkContext,SparkConf}
import org.apache.spark.sql._
import org.apache.spark.sql
object Temp {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setMaster("local").setAppName("SPARK SQL example")
val sc= new SparkContext(sparkConf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.createSchemaRDD
case class Person(name: String, age: Int)
val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt))
people.registerTempTable("people")
val teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")
teenagers.map(t => "Name: " + t(0)).collect().foreach(println)
}
}
我在第No TypeTag available for Person
行遇到了编译错误people.registerTempTable("people")
。
如何解决此错误?
答案 0 :(得分:4)
失败是因为Person类是在函数内部定义的,因此Scala编译器不会为类创建TypeTag。保罗建议你可以将它从功能中移到顶层。
我要补充说,有一个JIRA放宽了这个限制:https://issues.apache.org/jira/browse/SPARK-4842