classnotfoundexception在安装新版本时在spark中出现

83qze16e  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(481)

我试着看书 csv , json 以及 parquet 文件使用 spark . 但是,在每种情况下,我都会在问题的末尾列出错误。
我试过在 spark-shell :

val df = spark.read.csv('a.csv')

我也试过在 pyspark :

df = spark.read.csv('a.csv')

对于所有文件类型,我都会遇到相同的错误。这个 spark-version 我用的是 2.4.0 ,带 Package bin-hadoop-2.7 .
我也有 spark-2.3.3 安装。但是,我的环境变量 SPARK_HOME 已编辑为指向 spark-2.4.4 安装。
当我导出时 SPARKHOME 指向 spark-2.3.3 版本,一切正常。所以这是一些安装问题。
我不知道我应该做些什么改变 spark-2.4.0 开始工作? pyspark 也抛出相同的错误,开头还有一行:

py4j.protocol.Py4JJavaError: An error occurred while calling o30.json.

错误:

java.lang.NoClassDefFoundError: org/apache/spark/sql/execution/datasources/v2/FileDataSourceV2
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
  at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:348)
  at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:370)
  at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
  at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
  at scala.collection.convert.Wrappers$JIteratorWrapper.next(Wrappers.scala:43)
  at scala.collection.Iterator$class.foreach(Iterator.scala:891)
  at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
  at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
  at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
  at scala.collection.TraversableLike$class.filterImpl(TraversableLike.scala:247)
  at scala.collection.TraversableLike$class.filter(TraversableLike.scala:259)
  at scala.collection.AbstractTraversable.filter(Traversable.scala:104)
  at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:630)
  at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:194)
  at org.apache.spark.sql.DataFrameReader.json(DataFrameReader.scala:391)
  at org.apache.spark.sql.DataFrameReader.json(DataFrameReader.scala:325)
  ... 49 elided
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.execution.datasources.v2.FileDataSourceV2
  at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 80 more
jjhzyzn0

jjhzyzn01#

filedatasourcev2是在spark的更高版本中引入的特性,因此它的出现表明您可能使用了错误的二进制文件来启动上下文。
我保证
这个 $PATH 变量不包含任何冲突的二进制文件。
如果您使用的是spark shell: type spark-shell || which spark-shell 产生预期结果。否则,您可能希望直接运行$spark\u home/bin/spark shell。
如果您直接使用spark submit: type spark-submit || which spark-submit 产生预期结果。
如果 echo $PATH 包含具有冲突二进制文件的路径,您可能希望将路径设置为更简单的路径,或者至少删除冲突路径,例如 .../anaconda3/bin/ (例如,如果使用水蟒)。 $SPARK_HOME/conf/spark-defauls.conf 没有任何选项可以从任何地方添加冲突的jar。检查 spark.driver.extraClassPath 类似的配置可能会添加冲突的jar。
对选项的环境变量执行相同的检查: echo $SPARK_SUBMIT_OPTS

相关问题