NoClassDefFoundError: SparkSession - obwohl Build funktioniert

8

Ich habe Ссылка kopiert in ein neues Projekt und richten Sie eine build.sbt

ein %Vor%

Ich bin in der Lage, es von IntelliJ 2016.2.5 zu bauen, aber ich, wenn ich den Fehler

bekomme %Vor%

Ich kann sogar auf SparkSession klicken und zum Quellcode gelangen. Was ist das Problem?

    
Make42 02.11.2016, 15:32
quelle

4 Antworten

11

Wenn Sie provided für Ihre Abhängigkeit angeben, wird der Build für diese Abhängigkeit kompiliert, aber zur Laufzeit nicht zum Klassenpfad hinzugefügt (es wird angenommen, dass er bereits dort ist).

Das ist die richtige Einstellung beim Erstellen von Spark-Jobs für spark-submit (weil sie innerhalb eines Spark-Containers ausgeführt werden, der die Abhängigkeit bereitstellt, und ein zweites Mal würde Probleme verursachen).

Wenn Sie jedoch lokal arbeiten, benötigen Sie diese Abhängigkeit. Entweder ändere den Build so, dass er nicht provided hat (aber dann musst du ihn beim Erstellen anpassen, um den Job zu übergeben), oder konfiguriere deinen Laufzeitklassenpfad in der IDE, um diese JAR-Datei zu haben.

    
Thilo 03.11.2016 01:01
quelle
2

In meinem Fall habe ich meinen lokalen Cloudera CDH 5.9.0-Cluster verwendet, wobei Spark 1.6.1 standardmäßig installiert und Spark 2.0.0 als Paket installiert wurde. Daher verwendete spark-submit Spark 1.6.1 und spark2-submit Spark 2.0.0. Da SparkSession in Version 1.6.1 nicht vorhanden war, wurde der Fehler ausgelöst. Mit dem richtigen Befehl spark2-submit wurde das Problem behoben.

    
Garren 04.01.2017 17:49
quelle
1

Ich habe das gleiche Problem und es wurde behoben, nachdem die Variable SPARK_HOME gesetzt wurde, bevor der Funke-Job mit Spark-Submit gesendet wurde.

    
Ravi 24.05.2017 22:56
quelle
0

Ok, ich bin hier gelandet nach einem Link auf sbt gitter channel auf der Suche nach etwas anderem. Ich habe eine Lösung dafür. Thilo hat das Problem richtig beschrieben. Ihr sbt sagt "bereitgestellt", was für Ihre Zielumgebung korrekt ist, wenn Sie es auf Ihrem Cluster ausführen, wo Spark-Bibliotheken bereitgestellt werden, aber wenn Sie lokal in IntelliJ laufen, müssen Sie diese externen Bibliotheken zur Laufzeit "zur Verfügung stellen" und a Möglichkeit, das zu tun wäre

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt - & gt;
  2. Offene Moduleinstellungen - & gt;
  3. Bibliotheken im LHS-Menü auswählen - & gt;
  4. Klicken Sie auf + sign - & gt;
  5. wähle "Von Maven" - & gt;
  6. Geben oder suchen Sie nach Maven-Koordinaten. Sie können suchen, indem Sie den Namen der Bibliothek eingeben und die Tabulatortaste drücken. Dies zeigt ein Dropdown-Menü aller Übereinstimmungen und Sie können die richtige Version für Ihre Bibliothek auswählen - & gt;
  7. Klicken Sie auf OK

Beachten Sie, dass Sie diesen Vorgang möglicherweise wiederholen müssen, wenn Sie IntelliJ neu gestartet haben. Ich fand dies für IntelliJ IDEA 2016.3.6 auf OS X El Captain.

    
sparker 10.07.2017 10:43
quelle

Tags und Links