【问题标题】:Spark 1.2 SQL code does not work with Spark 1.3 SQL codeSpark 1.2 SQL 代码不适用于 Spark 1.3 SQL 代码
【发布时间】:2015-05-20 06:04:47
【问题描述】:

目前为止我在本地包目录中使用过这个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"

我想尝试一下刚出来的1.3.0版本,所以我使用了所有包的1.3.0版本。 Spark 可以编译,但 SparkSQL 没有,所以我检查了建议使用的 MavenCentral

libraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "1.3.0"

但仍然无法正常工作。 我从 sbt shell 进行 sbt 更新。 顺便说一句,使用 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"

在做

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 上下文的错误。

一定有什么愚蠢的错误。

【问题讨论】:

  • @JustinPihony,请查看编辑

标签: sbt apache-spark apache-spark-sql


【解决方案1】:

问题的一部分是SchemaRDD 变成了DataFrame。实际上,您应该使用

import sqlContext._

而不是特定的导入,因为它会在未来证明您不会进行隐式更改,但如果您真的想要,那么您可以使用

import sqlContext.implicits

但是,第二部分是 1.3.0 破坏了兼容性,现在从 API 的角度来看是锁定的,所以你现在需要执行以下操作:

  • 1.2 中的隐式并没有完全吹嘘。为了使用它们,您现在必须这样做:rdd.toDF().registerTempTable("xyz")

注意toDF

现在 API 已锁定,我想不出一种方法来添加更直观的 implicit。对于导入 sqlContext._ 和嵌套的隐式,您最终会遇到冲突的 implicit 定义scala 不支持。

来自migration guide

此外,隐式转换现在只增加 RDD 由带有方法的产品(即案例类或元组)组成 toDF,而不是自动应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2018-08-24
    • 2017-10-20
    • 2015-08-01
    相关资源
    最近更新 更多