2017-09-02 55 views
1

我正在Spark中開發極端學習機器類型的神經網絡,需要使用Moore-Penrose僞逆函數。這在任何Spark庫中都不可用,所以我使用Breeze,它需要將Spark數據結構轉換爲Breeze矩陣。當我達到beta = pinv(H) * T時,所有內容都會失敗,並出現OOM異常(我認爲這在Spark中並不可行)。任何想法爲什麼?Breeze pinv(Moore-Penrose)僞反函數使用Spark給出OutOfMemory錯誤

pinv是Breeze中的Moore-Penrose僞逆。 H是35,000行和10列的矩陣。 SVD應該能夠應對這一點。這不是一個特別大的數據集,只佔用30Mb。我在我的筆記本電腦本地運行所有東西,沒有任何東西在雲端。我的筆記本電腦上有8G內存(MacBook Air)。

我讀了你可以使用火花shell命令增加驅動器的內存,但我不知道如何做到這一點,否則會如何與我的IDE中的代碼,樹立SparkSession

val spark: SparkSession = SparkSession 
    .builder() 
    .master("local[*]") 
    .appName("ELMPipelineTest") 
    .getOrCreate()` 
鏈接
+0

好的,謝謝......那麼接下來呢,你覺得呢?你是說這太大了無法在我的筆記本電腦上工作? SVD對算法是必不可少的,如果沒有它,它將無法工作。你認爲增加駕駛記憶會有所作爲嗎?我真的不知道如何改變內存,對於初學者來說,這些指令是非常不透明的。謝謝你的幫助! – LucieCBurgess

回答

0

我解決這個問題如下。首先,應用程序必須在命令行運行,而不是通過IDE運行,因爲必須在構建JVM之前更改Spark驅動程序的內存。我用SBT作爲我的構建工具,所以從我的項目的頂級導演,通過對Linux shell我跑:

sbt compile 
sbt package // this creates a jar file 
$SPARK_HOME/bin/spark-submit --class dev.elm.ELMPipeline --master local[4] --driver-memory 8G path/to/jar.jar 

我第一次設置$ SPARK_HOME的火花HOME變量。 這可以避免Java OOM錯誤。感謝@RafalKwasny指出了這一點。