2
votes

spark submit lève une erreur java.lang.ClassNotFoundException: scala.runtime.java8.JFunction2 $ mcIII $ sp

J'ai écrit un code pour le nombre de mots, mais lorsque j'ai essayé de l'exécuter à partir de CMD dans Windows en utilisant la commande ci-dessous, cela lève une exception.

Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction2$mcIII$sp
        at com.sample.WordCount$.main(WordCount.scala:22)
        at com.sample.WordCount.main(WordCount.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 org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
        at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:849)
        at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
        at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
        at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
        at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction2$mcIII$sp
        ... 14 more
Caused by: java.lang.ClassNotFoundException: scala.runtime.java8.JFunction2$mcIII$sp

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>SparkSampleInScala</groupId>
    <artifactId>WordCountSample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>WordCountSample</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!--<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M1</version> 
        </plugin> </plugins> </build> -->
    <dependencies>

        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>2.4.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.scala-lang/scala-library -->
<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.12.8</version>
</dependency>


    </dependencies>
</project>  

mais quand j'ai exécuté spark, soumettre le message d'erreur ci-dessous:

spark-submit --class com.sample.WordCount --master local file:///E:/WordCountSample/target/WordCountSample-0.0.1-SNAPSHOT.jar file:///C:/Users/siddh/OneDrive/Desktop/sample.txt

Alors, que faut-il faire dans ce cas? ?? J'utilise la version spark 2.4.0 et la version scala 2.12.8 qui est déjà installée sur mes fenêtres. S'il vous plaît, aidez-moi car je suis coincé dans ce domaine depuis quelques jours. Merci d'avance :)


11 commentaires

Je ne tourne que sous Linux. Pas Windows.


Lève également la même erreur sous Linux


Pouvez-vous utiliser sbt pour votre build? Si oui, alors le plugin d'assembly sbt s'occupera de toutes les dépendances à mettre dans fat jar.


J'ai utilisé maven comme outil de construction, c'est pourquoi j'ai publié le code pom.xml


Vraiment difficile à faire à distance. Je suis d'accord avec une autre personne. Sbt est la voie à suivre.


Je n'ai jamais utilisé sbt. J'ai pu le faire il y a quelques jours, mais je vois maintenant cette erreur pour la première fois et je n'ai pas pu trouver de solution appropriée pour cela sur Google


Intellij est-il utilisé?


Non, j'utilise eclipse ide


Pouvez-vous simplement l'essayer en mon nom en utilisant eclipse, linux au moins avec la configuration que j'ai mentionnée ici


Je n'ai pas cette configuration.


Tout le monde s'il vous plaît aider si possible


3 Réponses :


5
votes

On dirait que vous utilisez 2.4.x avec Scala 2.12. Cela pourrait être un problème de compatibilité. Référence de la documentation Spark: - Spark fonctionne sur Java 8+, Python 2.7 + / 3.4 + et R 3.1+. Pour l'API Scala, Spark 2.4.0 utilise Scala 2.11. Vous devrez utiliser une version Scala compatible (2.11.x).


2 commentaires

OK, je vais l'essayer et vous le faire savoir


Merci beaucoup. Cela fonctionne pour moi après avoir changé la version de scala de 2.12. * À 2.11. *.



1
votes

J'ai eu le même problème et je l'ai résolu en modifiant la version de Scala que j'utilise pendant le développement pour qu'elle corresponde à la version fournie avec Spark.

Quand je lance Spark avec ./spark-shell , il dit Using Scala version 2.11.12 , J'ai donc changé la version Scala dans le build.sbt de 2.12.8 à 2.11.12 et tout a fonctionné. J'utilise la version Spark 2.4.3 .


0 commentaires

0
votes

Les autres réponses sont correctes.

Pour les ajouter, n'oubliez pas de mettre à jour le chemin du fichier jar dans la commande spark-submit lorsque vous changez de version de Scala. Donc si vous utilisez sbt c'est:

  1. Mettez à jour la version Scala pour qu'elle soit compatible avec Spark.
  2. paquet sbt
  3. Mettez à jour le chemin du fichier jar dans la commande spark-submit. Dans mon cas, il est passé de target / scala-2.12 / word-count-app_2.12-1.0.jar à target / scala-2.11 / word-count-app_2.11-1.0. pot .

1 commentaires

Merci pour la réponse. J'utilisais maven et c'était il y a longtemps: P