【问题标题】:Use scala spark to read csv and get the error: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$使用scala spark读取csv并得到错误:线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/spark/sql/SparkSession$
【发布时间】:2021-08-29 09:03:13
【问题描述】:

我在 Intellij 的 scala 中使用 spark,我使用 POM 导入 spark。现在我想读取一个csv文件如下:

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession

object demo {
  def main(args: Array[String]): Unit = {
    Logger.getLogger("org").setLevel(Level.ERROR)
    val spark: SparkSession = {
      SparkSession
        .builder()
        .master("local")
        .appName("spark pika")
        .getOrCreate()
    }
    val df = spark.read.option("header", "true").option("inferSchema", "true")
      .csv("/Users/siyuxiao/Downloads/churn_dataset_train.csv")
    df.show()
  }
}

但我得到了以下信息:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$
    at demo$.main(demo.scala:12)
    at demo.main(demo.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession$
    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)

如何解决这个问题并读取我的 csv 文件? 这是我的 POM 依赖项:

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.3.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.3.2</version>
        <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive_2.11</artifactId>
        <version>2.3.2</version>
        <scope>provided</scope>
    </dependency>

</dependencies>

如果有人能解决这个问题,我真的很感激。

【问题讨论】:

  • 请添加您的 pom 文件。以及您如何运行您的应用程序?
  • Stackoeverflow 不让我放所有的 POM 代码,因为代码太多。所以我只是把依赖项放在那里。如果你需要所有的 POM,我可以发一张图片。

标签: scala maven apache-spark intellij-idea


【解决方案1】:

java.lang.NoClassDefFoundError 表示 java 在类路径中找不到类。如果你在本地运行它,你必须从 pom.xml 中删除 &lt;scope&gt;provided&lt;/scope&gt;

pom.xml 示例:

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <spark.version>2.4.8</spark.version>
    <scala.version>2.12.8</scala.version>
    <scala.compat.version>2.12</scala.compat.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_${scala.compat.version}</artifactId>
        <version>${spark.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_${scala.compat.version}</artifactId>
        <version>${spark.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive_${scala.compat.version}</artifactId>
        <version>${spark.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.scala-tools</groupId>
            <artifactId>maven-scala-plugin</artifactId>
            <version>${scala.compat.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

【讨论】:

  • 我曾经尝试过,但仍然有错误:线程“main”中的异常 java.lang.NoSuchMethodError: scala.collection.mutable.Buffer$.empty()Lscala/collection/GenTraversable;在 org.apache.spark.sql.SparkSessionExtensions.(SparkSessionExtensions.scala:69) 在 org.apache.spark.sql.SparkSession$Builder.(SparkSession.scala:780) 在 org.apache.spark .sql.SparkSession$.builder(SparkSession.scala:980) 在 demo$.main(demo.scala:12) 在 demo.main(demo.scala)
  • @xiao 看起来您的 scala 版本兼容性有问题,或者您在类路径中有多个 scala 版本。显示 scala 的所有依赖项。您的 spark 版本必须仅使用 scala 11 或更改 spark 版本
  • 如何显示 scala 的所有依赖项?请您更具体地解释一下吗?
  • @xiao 看起来你的 IDE 没有使用 scala 11。你使用 spark 版本 spark-core_2.11 用于 scala 11。你必须为 scala 11 切换 IDE 设置。我附上示例 pom - 你可以尝试使用它
  • 我检查了我的 Scala 版本:siyuxiao@Siyus-MBP:~/maven$ scala -version Scala 代码运行器版本 2.12.8 -- 版权所有 2002-2018,LAMP/EPFL 和 Lightbend, Inc.
猜你喜欢
  • 2018-08-09
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 2021-07-22
  • 1970-01-01
相关资源
最近更新 更多