[英]NoClassDefFoundError while running Spark depending neo4j jar(scala)
我有一個試圖連接到Neo4j數據庫並在Spark上運行的程序testApp.scala
,我使用sbt package
將其打包,以根據this_contribution的依賴關系將其sbt package
到a.jar
(我已經有了neo4j-spark-connector-2.0.0-M2.jar
)
resolvers += "Spark Packages Repo" at "http://dl.bintray.com/spark-packages/maven"
libraryDependencies += "neo4j-contrib" % "neo4j-spark-connector" % "2.0.0-M2"
但是,當我嘗試執行spark-submit --class "testApp" a.jar
,結果卻是NoClassDefFoundError
Exception in thread "main" java.lang.NoClassDefFoundError: org/neo4j/spark/Neo4j$
代碼val n = Neo4j(sc)
Exception in thread "main" java.lang.NoClassDefFoundError: org/neo4j/spark/Neo4j$
我還有兩件事要提到
1)I用於jar vtf
檢查在內容a.jar
,它只有testApp.class
,沒有類的neo4j
是在它的,但封裝過程是成功(意思的neo4j-spark-connector-2.0.0-M2.jar
是否未打包?)
2)我可以使用spark-shell --packages neo4j-contrib:neo4j-spark-connector:2.0.0-M2
並在testApp.scala
鍵入代碼,沒有問題(例如,上面的錯誤行是val n = Neo4j(sc)
但可以在星光外殼中使用)
您可以嘗試將--jars
選項與spark-submit
。 例如
./bin/spark-submit --class "fully-qualified-class-name" --master "master-url" --jars "path-of-your-dependency-jar"
或者,您也可以使用spark.driver.extraClassPath="jars-class-path"
解決問題。希望這會有所幫助。
由於.jar
中的內容不包含Neo4j
類,因此是打包問題。
我們應該修改的是sbt
,而不是sbt package
,我們應該使用sbt clean assembly
。 這有助於創建一個.jar
包,其中包含所有依賴項。
如果僅使用sbt package
,則編譯進度可以,但不會將neo4j-*.jar
到您的.jar
。 因此,在運行時它將引發NoClassDefError
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.