到目前为止,我已经在本地包目录
中使用了这个build.sbtname := "spark27_02"
version := "1.0"
scalaVersion := "2.10.4"
sbtVersion := "0.13.7"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.2.1"
libraryDependencies += "org.apache.spark" %% "spark-streaming" % "1.2.1"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.2.1"
libraryDependencies += "org.apache.hadoop" % "hadoop-hdfs" % "2.5.0"
我想试用刚出来的1.3.0版本,所以我使用了所有软件包的1.3.0版本。 Spark编译,但SparkSQL没有,所以我检查了建议使用
的MavenCentrallibraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "1.3.0"
但仍无效。 我从sbt shell做了更新。 顺便说一下使用Scala 2.10.4
我做错了什么傻事?
感谢任何帮助。
EDIT 参考带有此build.sbt的spark网页上的示例
name := "Marzia2"
version := "1.0"
scalaVersion := "2.10.4"
sbtVersion := "0.13.7"
libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.3.0"
libraryDependencies += "org.apache.spark" % "spark-streaming_2.10" % "1.3.0"
libraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "1.3.0"
做
sbt package
我得到了
[info] Compiling 1 Scala source to /home/cloudera/IdeaProjects/Marzia2/target/scala-2.10/classes...
[error] /home/cloudera/IdeaProjects/Marzia2/src/main/scala/prova_sql.scala:35: value createSchemaRDD is not a member of org.apache.spark.sql.SQLContext
[error] import sqlContext.createSchemaRDD
[error] ^
[error] /home/cloudera/IdeaProjects/Marzia2/src/main/scala/prova_sql.scala:38: value registerTempTable is not a member of org.apache.spark.rdd.RDD[prova_sql.Person]
[error] people.registerTempTable("people")
[error] ^
[error] two errors found
[error] (compile:compile) Compilation failed
如果我在定义spark上下文时使用implicits
之类的新功能,我仍然会收到与它有关的错误,而不是sparksql上下文的错误。
某处肯定会有一些愚蠢的错误。
答案 0 :(得分:6)
问题的一部分是SchemaRDD
成为DataFrame
。实际上,你应该使用
import sqlContext._
而不是特定的导入,因为它将来会证明你反对隐式更改,但如果你真的想要那么你可以使用
import sqlContext.implicits
但是,第二部分是1.3.0打破了兼容性,现在从API角度锁定,所以现在需要执行以下操作:
rdd.toDF().registerTempTable("xyz")
请注意toDF
现在已经锁定了API,我想不出可以添加更直观的implicit
的方法。对于导入的情况,您最终会遇到冲突的implicit
定义{{1 scala中不支持嵌套的implicits。
此外,隐式转换现在只会增加RDD 由产品(即案例类或元组)和方法组成 toDF,而不是自动申请。