2016-11-02 29 views
8

çalışıyor olsa yeni bir proje ve kurulumNoClassDefFoundError: SparkSession - hatta inşa

name := "newproject" 
version := "1.0" 
scalaVersion := "2.11.8" 

javacOptions ++= Seq("-source", "1.8", "-target", "1.8") 
scalacOptions += "-deprecation" 

libraryDependencies ++= Seq(
    "org.apache.spark" % "spark-core_2.11" % "2.0.0" % "provided", 
    "org.apache.spark" % "spark-sql_2.11" % "2.0.0" % "provided", 
    "org.apache.spark" % "spark-mllib_2.11" % "2.0.0" % "provided", 
    "org.jpmml" % "jpmml-sparkml" % "1.1.1", 
    "org.apache.maven.plugins" % "maven-shade-plugin" % "2.4.3", 
    "org.scalatest" %% "scalatest" % "3.0.0" 
) 

Ben IntelliJ 2016/02/05 onu kurabilirim bir build.sbt içine https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/ml/RandomForestClassifierExample.scala kopyalanan, ama ben aldığımda Hata

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$ 
    at org.apache.spark.examples.ml.RandomForestClassifierExample$.main(RandomForestClassifierExample.scala:32) 
    at org.apache.spark.examples.ml.RandomForestClassifierExample.main(RandomForestClassifierExample.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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession$ 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 7 more 

Hatta SparkSession'ı tıklayıp kaynak koduna erişebiliyorum. Sorun nedir?

+1

kullanıyor musunuz? – maasg

+0

Korkarım İngilizce :-) kullanmanız gerekecek :-) – maasg

+0

@maasg: Dang - Çok yoruldum. Bugün yine zor bir iş günü oldu. Dedim: hayır ben yok. IntelliJ'u kullandım. Sanırım SBT'nin “sağladığı” ile çatışan, değil mi? – Make42

cevap

10

Bağımlılığınız için provided derken, derleme bu bağımlılığa karşı derlenecek, ancak çalışma zamanında sınıf yoluna eklenmeyecektir (zaten var olduğu varsayılmıştır).

spark-submit için Spark işlerini oluştururken bu doğru ayardır (çünkü bağımlılığı sağlayan bir Spark kapsayıcısının içinde çalışacaklar ve ikinci bir kez de sorun çıkarır). Ancak, yerel olarak çalıştırdığınızda, bu bağımlılığa gereksiniminiz vardır. Bu nedenle, bu provided yapısına sahip olmamak için değişikliği değiştirin (ancak işi göndermek için oluştururken ayarlamanız gerekir) veya bu jar dosyasına sahip olması için IDE'de çalışma zamanı sınıf yolunuzu yapılandırın.

+0

Teşekkür ederim. Nasıl “IntelliJ] çalışma zaman sınıfyolunu“ bu jar dosyasına sahip olmak için ”Spark için nasıl“ congiure ”yapabilirim? Http://stackoverflow.com/a/24843914/4533188 adresini buldum - "spark-2.0.1-bin-hadoop2.7/jar" klasörünü ekledim mi? Denediğim şey bu, ama işe yaramıyor: Bir "NoClassDefFoundError" bir kez daha aldım. – Make42

2

Benim durumumda, yerel Cloudera CDH 5.9.0 kümemi, varsayılan olarak Spark 1.6.1 ve Spark 2.0.0 paketi olarak kullanıyorum. Böylece, spark-submit Spark 1.6.1 kullanıyordu, spark2-submit ise Spark 2.0.0 idi. SparkSession, 1.6.1'de bulunmadığından, hata atıldı. Doğru spark2-submit komutunu kullanarak sorunu çözdünüz.

0

Aynı sorunu aldım ve kıvılcım işini kullanarak kıvılcım işini göndermeden önce SPARK_HOME değişkenini ayarladıktan sonra düzeltildi.

0

Tamam Başka bir şey ararken sbt gitter kanalındaki bir bağlantıyı takip ederek buraya indim. Bunun için bir çözümüm var. Thilo sorunu doğru bir şekilde açıkladı. Sbt’niz, hedef ortamınız için doğru olan ve "kıvılcım kitaplıklarının sağlandığı, ancak IntelliJ içinde yerel olarak çalıştığınız zaman," sağlanmış "yazıyor" diyor, bu harici kütüphaneleri çalışma zamanında IntelliJ'e "sağlamanız" gerekecek. Bunu yapmanın yolu

Right click on your project -> 
Open Module settings -> 
Select Libraries on LHS menu -> 
Click + sign -> 
choose 'From Maven' -> 
Type or search for maven coordinates. You can search by typing the lib name and hit the tab key. This will show a dropdown of all matches and you can choose the correct version for your library -> 
Click OK 

IntelliJ'yi yeniden başlattığınızda bu işlemi tekrarlamanız gerekebilir. Bunu OS X El Kaptanı'nda IntelliJ IDEA 2016.3.6 için durum için buldum. Uygulamanızı çalıştırmak için `spark-submit` öğesini