Ire*_*ene 3 sbt apache-spark apache-spark-sql
到目前为止,我已经在本地包目录中使用了这个build.sbt
name := "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"
Run Code Online (Sandbox Code Playgroud)
我想试用刚出来的1.3.0版本,所以我使用了所有软件包的1.3.0版本.Spark编译,但SparkSQL没有编译,所以我检查了建议使用的MavenCentral
libraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "1.3.0"
Run Code Online (Sandbox Code Playgroud)
但仍然没有工作.我从sbt shell做了更新.顺便说一下使用Scala 2.10.4
我做错了什么傻事?
任何帮助表示赞赏.
编辑引用此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"
Run Code Online (Sandbox Code Playgroud)
干
sbt package
Run Code Online (Sandbox Code Playgroud)
我明白了
[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
Run Code Online (Sandbox Code Playgroud)
如果我使用像implicits定义spark上下文的新功能,我仍然会得到一个错误,它不是sparksql上下文的错误.
某处肯定会有一些愚蠢的错误.
问题的一部分是SchemaRDD成为一个DataFrame.实际上,你应该使用
import sqlContext._
Run Code Online (Sandbox Code Playgroud)
而不是特定的导入,因为它将来会证明你反对隐式更改,但如果你真的想要,那么你可以使用
import sqlContext.implicits
Run Code Online (Sandbox Code Playgroud)
但是,第二部分是1.3.0破坏了兼容性,现在从API角度锁定,因此您现在需要执行以下操作:
rdd.toDF().registerTempTable("xyz")请注意 toDF
既然已经锁定了API,我就无法想到添加更直观implicit的方法.implicit对于导入的情况,最终会出现冲突的定义,sqlContext._并且scala中不支持嵌套的implicits.
从迁移指南:
此外,隐式转换现在只使用方法toDF来增加由Products(即案例类或元组)组成的RDD,而不是自动应用.
| 归档时间: |
|
| 查看次数: |
3679 次 |
| 最近记录: |