当前位置: 首页 > 知识库问答 >
问题:

NoClassDefFoundError:Spark会话-即使构建正在工作

黄飞翮
2023-03-14

我将https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/ml/RandomForestClassifierExample.scala复制到一个新项目中并设置了一个build.sbt

name := "newproject"
version := "1.0"
scalaVersion := "2.11.8"

javacOptions ++= Seq("-source", "1.8", "-target", "1.8")
scalacOptions += "-deprecation"

libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.11"  % "2.0.0" % "provided",
  "org.apache.spark" % "spark-sql_2.11"   % "2.0.0" % "provided",
  "org.apache.spark" % "spark-mllib_2.11" % "2.0.0" % "provided",
  "org.jpmml" % "jpmml-sparkml" % "1.1.1",
  "org.apache.maven.plugins" % "maven-shade-plugin" % "2.4.3",
  "org.scalatest" %% "scalatest" % "3.0.0"
)

我能够从IntelliJ 2016.2.5构建它,但是当我得到错误时我

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$
    at org.apache.spark.examples.ml.RandomForestClassifierExample$.main(RandomForestClassifierExample.scala:32)
    at org.apache.spark.examples.ml.RandomForestClassifierExample.main(RandomForestClassifierExample.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession$
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

我甚至可以点击SparkSession并获得源代码。有什么问题?

共有3个答案

龙高超
2023-03-14

我得到了同样的问题,它得到了修复后设置SPARK_HOME变量,然后提交火花作业使用火花提交。

方飞鸣
2023-03-14

在我的例子中,我使用的是本地Cloudera CDH 5.9.0集群,默认情况下安装了Spark 1.6.1,Spark 2.0.0作为包安装。因此,<code>spark submit</code>使用的是spark 1.6.1,而<code>spark2 submit使用的是spark 2.0.0。由于SparkSession在1.6.1中不存在,因此引发了错误。使用正确的spark2 submit命令解决了问题。

柳翼
2023-03-14

当您说<code>为依赖项提供了</code>时,构建将根据该依赖项进行编译,但它不会在运行时添加到类路径中(假定它已经存在)。

这是为spacy-提交构建Spark作业时的正确设置(因为它们将在提供依赖项的Spark容器内运行,第二次包含它会带来麻烦)。

但是,在本地运行时,需要存在该依赖项。因此,要么将生成更改为不提供此内容(但随后需要在生成时进行调整以提交作业),要么在 IDE 中将运行时类路径配置为已具有该 jar 文件

 类似资料:
  • 来自ZooKeeper服务器的日志:

  • 问题内容: 我在Hibernate 4中生成会话工厂时遇到问题。在Hibernate 3中,我很简单地做到了: 现在,我需要将ServiceRegistry类传递给buildSessionFactory,但是Javadocs对如何执行此操作非常含糊。有小费吗? 问题答案: 是的,他们已经弃用了先前的buildSessionFactory API,并且做起来很容易..您可以执行类似的操作。 编辑 :

  • 我试图在我的自定义服务中使用会话变量。 我已经设置添加以下行services.yaml 我的会期考试是这样的 并收到此错误:函数App\Services\SessionTest的参数太少::_construct(),在第33行的/var/www/App.dev/src/Controller/OrdersController.php中传递了0,预期正好是1

  • 我不知道Codeigniter中会话的实际错误是什么。我的另一个项目很好地使用了这段代码。但在这种情况下,我遇到了问题。 对于登录会话,我的代码是: 我将会话检查为: 在进入控制器之前,我会像上面一样检查会话,如果会话不正确,则重定向到登录页面。 注销: 但是上面的代码不适合我。当我注销时,页面被成功地重定向到注销页面,但是会话没有被破坏,因为我可以访问需要会话设置的所有页面。请帮帮我。 我有一个

  • 问题内容: 所以我试图让Session在我的socket.on(’connection’,…)内部工作,我试图使用最新版本进行工作:Socket.io-0.9.13,Express-3.1.0和最新版本其他模块。 无论如何,我都尝试过使用两个模块’ connect-redis ‘和’ session.socket.io ‘,它们都有类似的问题。 在我的代码中,我有2个redis存储(socketi

  • 我已经创建了一个默认的表单登录身份验证,下面是我的配置。 身份验证工作正常,但最近我在应用程序中添加了会话超时。我的应用程序每5秒轮询一次服务器,因此默认超时不起作用。我在谷歌上找到了下面的过滤器解决方案,并实现了它。 另外,2)我没有得到会话超时错误消息,因为它被重定向到这个页面,一次又一次地转到登录页面。我不能保存这个错误消息,直到用户再次登录。 有什么指示吗?