簡體   English   中英

根據Neo4j jar(scala)運行Spark時出現NoClassDefFoundError

[英]NoClassDefFoundError while running Spark depending neo4j jar(scala)

我有一個試圖連接到Neo4j數據庫並在Spark上運行的程序testApp.scala ,我使用sbt package將其打包,以根據this_contribution的依賴關系將其sbt packagea.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM