我正在Spark中开发一种极端学习机器类型的神经网络,它需要使用Moore-Penrose伪逆函数。这在任何Spark库中都不可用,所以我使用Breeze,它需要将Spark数据结构转换为Breeze矩阵。当我到达beta = pinv(H) * T
时,一切都因OOM异常而失败(我认为在Spark中我没有考虑过)。有什么想法吗?
pinv
是Breeze中的Moore-Penrose伪逆。 H是35,000行和10列的矩阵。 SVD应该能够解决这个问题。它不是一个特别大的数据集,只需要30Mb。我在笔记本电脑上本地运行所有内容,云中没有任何东西。我的笔记本电脑上有8G内存(MacBook Air)。
我读到你可以使用spark-shell命令增加驱动程序内存,但我不知道如何执行此操作,或者它如何与我设置SparkSession的IDE中的代码链接
val spark: SparkSession = SparkSession
.builder()
.master("local[*]")
.appName("ELMPipelineTest")
.getOrCreate()`
答案 0 :(得分: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设置为spark home变量。 这可以避免Java OOM错误。感谢@RafalKwasny指出这一点。