2016-04-03 53 views
2

我修改了Spark中的mllib並希望在其他項目中使用自定義的mllib jar。它可以在我使用以下構建火花時使用:如何單獨構建Spark Mllib子模塊

build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package 

從Spark的文檔中獲得http://spark.apache.org/docs/latest/building-spark.html#building-submodules-individually。但是構建整個Spark包需要很長時間(我的桌面上大約需要7分鐘),所以我只想單獨構建mllib。在Spark中構建子模塊的指令也來自同一個鏈接,我使用的是:

build/mvn -pl :spark-mllib_2.10 clean install 

只是構建Mllib本身。它成功構建,但是,當運行其他使用mllib的項目時,我看不到在mllib中所做的更改。當我從頭開始構建整個Spark時,這確實起作用,但我想知道如何使用maven來單獨構建mllib?

回答

0

我懷疑編譯好的mllib jar在運行應用程序時沒有真正使用。所以,我在代碼中加入這一行運行應用程序時打印出修改類的位置:

logInfo(getClass.getProtectionDomain.getCodeSource.getLocation.getPath) 

而且事實證明,星火使用火花組裝1.6.0-hadoop2.4.0。 jar,它仍然使用舊的mllib jar。所以我代替使用編譯時同時mllib和裝配:

build/mvn -DskipTests -pl :spark-mllib_2.10 install 
build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests -pl :spark-assembly_2.10 install 

這在我的機器1分鐘,整個編譯時間縮短到一點點。必須有更好的方法來進行增量編譯,而這需要更短的時間,我仍然在尋找這樣的解決方案。但目前,我將使用此修復程序。

相關問題