Scala Breeze-pinv(Moore-Penrose)伪逆函数使用Spark给出了记忆误差

Scala Breeze-pinv(Moore-Penrose)伪逆函数使用Spark给出了记忆误差,scala,apache-spark,matrix,out-of-memory,Scala,Apache Spark,Matrix,Out Of Memory,我正在Spark中开发一种极端学习机器类型的神经网络,它需要使用Moore-Penrose伪逆函数。这在任何Spark库中都不可用,所以我使用Breeze,它需要将Spark数据结构转换为Breeze矩阵。当我到达beta=pinv(H)*T时,一切都会失败,出现OOM异常(我认为在Spark中不可能出现这种情况)。你知道为什么吗 pinv是微风中的摩尔-彭罗斯伪逆。H是一个由35000行和10列组成的矩阵。SVD应该能够应对这种情况。它不是一个特别大的数据集,只占用30Mb。我在笔记本电脑上本

我正在Spark中开发一种极端学习机器类型的神经网络,它需要使用Moore-Penrose伪逆函数。这在任何Spark库中都不可用,所以我使用Breeze,它需要将Spark数据结构转换为Breeze矩阵。当我到达
beta=pinv(H)*T时,一切都会失败,出现OOM异常(我认为在Spark中不可能出现这种情况)。你知道为什么吗

pinv
是微风中的摩尔-彭罗斯伪逆。H是一个由35000行和10列组成的矩阵。SVD应该能够应对这种情况。它不是一个特别大的数据集,只占用30Mb。我在笔记本电脑上本地运行所有东西,在云中什么都没有。我的笔记本电脑(MacBook Air)上有8G内存

我读到您可以使用sparkshell命令增加驱动程序内存,但我不知道如何做到这一点,也不知道它如何与我的IDE中设置SparkSession的代码链接

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

我修正了这个问题,如下所示。首先,应用程序必须在命令行上运行,而不是通过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变量。
这避免了javaoom错误。感谢@RafalKwasny指出这一点。

我将其修复如下。首先,应用程序必须在命令行上运行,而不是通过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变量。
这避免了javaoom错误。感谢@RafalKwasny指出这一点。

好的,谢谢。。。你认为下一步该怎么办?你是说这个太大了,我的笔记本电脑不能用?SVD是算法的关键,没有它,它就无法工作。你认为增加驾驶员记忆会有所不同吗?我真的不知道如何改变记忆,对于初学者来说,说明是相当不透明的。谢谢你的帮助!好的,谢谢。。。你认为下一步该怎么办?你是说这个太大了,我的笔记本电脑不能用?SVD是算法的关键,没有它,它就无法工作。你认为增加驾驶员记忆会有所不同吗?我真的不知道如何改变记忆,对于初学者来说,说明是相当不透明的。谢谢你的帮助!