Артефакты (.jar), созданные с помощью Intellij Idea. Scala Spark создает исключение ClassNotFoundException с помощью spark-submit - PullRequest
0 голосов
/ 25 сентября 2018

Я прошел через различные связанные предложения, но я все еще борюсь.

Что у меня есть:

Spark:2.3.1
Scala:2.11.8
OS: Windows 10
IDE:Intellij Idea
Code:
     package: testpackage
                      merge.scala -->has do() method
                      mymain.scala -->has main() method and inside that merge.do()

Project Settings--Artifacts-->
                              Main Class-->testpackage.mymain
                              Class Path--><blank>

Что работает:

1. Running properly on IDE
2. JAR creation : Artifacts are getting generated properly as testpackage.jar
3. I can see the classes(along with various other libraries) when I open testpackage.jar in winrar as:
   testpackage\merge$$anonfun$1.class
   testpackage\merge$$anonfun$2.class
   testpackage\merge$.class
   testpackage\merge.class
   testpackage\mymain$.class
   testpackage\mymain.class

Чтоне работает

spark-submit from command prompt throws exception:

java.lang.ClassNotFoundException: testpackage.mymain
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at org.apache.spark.util.Utils$.classForName(Utils.scala:238)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:851)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:198)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:228)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:137)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Дополнительная информация:

1. spark-submit executed from jar folder (~out\artifacts\testpackage_jar)
2. the testpackage.jar is about 128MB

То же исключение, если я пытаюсь:

spark-submit testpackage.jar C:\temp\input.csv
spark-submit --class testpackage.mymain testpackage.jar C:\temp\input.csv
spark-submit --class mymain testpackage.jar C:\temp\input.csv

Также пробовал с помощью следующего оператора в build.sbt

mainClass in (Compile, packageBin) := Some("testpackage.mymain")

Также пробовал с помощью следующего утверждения в build.sbt

mainClass in (Compile, packageBin) := Some("mymain")

Также пытался сохранить jar в папке Spark bin, на моей машине это

C:\Spark\spark-2.3.1-bin-hadoop2.7\bin

Пробовалс --mater local [*] и несколькими другими комбинациями.

Благодарим Вас за помощь !!

1 Ответ

0 голосов
/ 27 сентября 2018

Наконец я нашел решение.На всякий случай, если кто-нибудь еще столкнется с этим.Убедитесь, что у вас есть только 1 запись, то есть «выходные данные компиляции вашего пакета» в разделе «ваш пакет.jar» в Структуре проекта -> Артефакты -> Схема вывода

Это странно,все еще я не знаю, почему это не будет работать!

Теперь мой размер банки 10 КБ и работает хорошо!:)

...