2017-09-02 19 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指出了这一点。