【问题标题】:Spark 1.3.1 SQL Lib: Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.sql.SQLContext.implicits()Spark 1.3.1 SQL Lib:线程“主”java.lang.NoSuchMethodError 中的异常:org.apache.spark.sql.SQLContext.implicits()
【发布时间】:2015-06-02 20:06:14
【问题描述】:

以下代码导致Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.sql.SQLContext.implicits()Lorg/apache/spark/sql/SQLContext$implicits$

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.log4j.Logger
import org.apache.log4j.Level

object Small {

  def main(args: Array[String]) {
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
    // set up environment
    val conf = new SparkConf()
      .setMaster("local[1]")
      .setAppName("Small")
      .set("spark.executor.memory", "2g")
    val sc = new SparkContext(conf)

    val sqlContext = new org.apache.spark.sql.SQLContext(sc)
    import sqlContext.implicits._
    val df = sc.parallelize(Array((1,30),(2,10),(3,20),(1,10), (2,30))).toDF("books","readers")
    df.show

项目是使用 SBT 构建的:

name := "Small"

version := "1.0"

scalaVersion := "2.10.4"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.3.1"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.3.1"

我用提交脚本运行这个:

#!/bin/sh
/home/test/usr/spark-1.1.0/bin/spark-submit \
--class Small \
--master local[*] \
--driver-memory 2g \
/home/test/wks/Pairs/target/scala-2.10/small_2.10-1.0.jar 

有什么想法吗?

SBT 可以编译和打包这段代码。然而,当我尝试使用 sbt run 运行此代码时,我得到另一个异常:[error] (run-main-0) scala.reflect.internal.MissingRequirementError: class org.apache.spark.sql.catalyst.ScalaReflection in JavaMirror with java.net.URLClassLoader@210ce673 of type class java.net.URLClassLoader with classpath [file:/home/test/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar, ...

在启动 Scala 程序时,有什么方法可以让 sbt run 包含 所有依赖项

【问题讨论】:

  • 您的 spark 实例是否也使用 1.3.x 版本? NoSuchMethodError 几乎总是意味着运行时可用的类文件与编译程序时的类文件不同。
  • 我在 sbt 文件中指定了libraryDependencies += "org.apache.spark" %% "spark-core" % "1.3.1",所以我假设sbt packagesbt run 应该使用spark 1.3.1。不是吗?
  • 您正在将您的工作提交给 spark 实例; /home/test/usr/spark-1.1.0/bin/spark-submit 显示了我所指的内容(当您在编译时使用 1.3.1 时,spark 实例版本为 1.1.0)。请更新您的 spark 版本以使其匹配。
  • 哦,是的,你说的很对,谢谢。但是sbt run 呢?它不应该与libraryDependencies += "org.apache.spark" %% "spark-core" % "1.3.1" 一起工作吗?
  • 检查stackoverflow.com/questions/27824281/…,它可能会有所帮助。

标签: sql scala apache-spark


【解决方案1】:

“/home/test/usr/spark-1.1.0/bin/spark-submit” 您的编译版本是 1.3.1,它与运行时版本不同。 1.1.0 版本的SqlContext 没有定义“对象隐式”。

【讨论】:

    猜你喜欢
    • 2017-01-31
    • 2020-08-30
    • 2019-06-18
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多