Spark SQL失败,出现java.lang.NoClassDefFoundError:org/codehaus/commons/compiler/UncheckedCompileException

Dan*_*zan 13 apache-spark-sql

只要在数据帧上调用第一个操作,在Java中运行Spark SQL(v2.1.0_2.11)程序会立即失败并出现以下异常:

java.lang.ClassNotFoundException: org.codehaus.commons.compiler.UncheckedCompileException
Run Code Online (Sandbox Code Playgroud)

我在Eclipse之外的spark-submit环境中运行它.我使用以下Spark SQL Maven依赖项:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.1.0</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

Dan*_*zan 29

罪魁祸首是图书馆commons-compiler.这是冲突:

在此输入图像描述

要解决此问题,请将以下内容添加到pom.xml:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.janino</groupId>
            <artifactId>commons-compiler</artifactId>
            <version>2.7.8</version>
        </dependency>
    </dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

  • 也许有人偶然发现...当我从Spark 2.1升级到2.3时.上面的解决方法停止为我工作.所以我将`org.codehaus.janino:janino`的版本修复为3.0.8.这有帮助. (5认同)
  • 好吧,我找到了一个解决方案——我必须使用 Janino `3.0.8` 而不是更新的版本(例如 `3.1.0`)。另外,我必须明确依赖于 `org.codehaus.janino:janino` 和 `org.codehaus.janino:commons-compiler:`。谢谢! (3认同)

Mak*_*sym 14

当更新spark-2.2.1到spark-2.3.0时,我遇到了类似的问题.

在我的情况下,我不得不修复commons-compiler和janino

Spark 2.3解决方案:

<dependencyManagement>
    <dependencies>
        <!--Spark java.lang.NoClassDefFoundError: org/codehaus/janino/InternalCompilerException-->
        <dependency>
            <groupId>org.codehaus.janino</groupId>
            <artifactId>commons-compiler</artifactId>
            <version>3.0.8</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.janino</groupId>
            <artifactId>janino</artifactId>
            <version>3.0.8</version>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>commons-compiler</artifactId>
        <version>3.0.8</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>janino</artifactId>
        <version>3.0.8</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)


Mar*_*han 7

如果您使用的Spark 3.0.1版本是我写这个答案的最新版本,您必须为 @Maksym 解决方案3.0.16的两个janino依赖项选择版本,效果非常好。


小智 5

我的实现需求是Spring-boot + Scala + Spark(2.4.5)

对于此问题,解决方案是排除“spark-sql_2.12”版本 2.4.5 附带的artifactID“janino”和“commons-compiler”。
原因是artifactID“janino”和“commons-compiler”的更新版本为3.1.2,它随“spark-sql_2.12”版本2.4.5一起提供。

排除后,为artifactID“janino”和“commons-compiler”添加版本3.0.8作为单独的依赖项。

<dependencies>
     <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.12</artifactId>
        <version>2.4.5</version>
        <exclusions>
            <exclusion>
                <artifactId>janino</artifactId>
                <groupId>org.codehaus.janino</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-compiler</artifactId>
                <groupId>org.codehaus.janino</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <artifactId>janino</artifactId>
        <groupId>org.codehaus.janino</groupId>
        <version>3.0.8</version>
    </dependency>
    <dependency>
        <artifactId>commons-compiler</artifactId>
        <groupId>org.codehaus.janino</groupId>
        <version>3.0.8</version>
    </dependency>
    ...............
    ...............
    ...............
    ...............
    ...............
</dependencies>
Run Code Online (Sandbox Code Playgroud)