Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 少量列和行上的Spark PCA OutOfMemory错误_Scala_Apache Spark_Out Of Memory_Pca_Apache Spark Mllib - Fatal编程技术网

Scala 少量列和行上的Spark PCA OutOfMemory错误

Scala 少量列和行上的Spark PCA OutOfMemory错误,scala,apache-spark,out-of-memory,pca,apache-spark-mllib,Scala,Apache Spark,Out Of Memory,Pca,Apache Spark Mllib,我试图在一个包含2168列和大量行的行矩阵上执行Spark MLLib PCA(使用Scala)。但是,我观察到,即使矩阵中只有2行(112KB的文本文件),在同一作业步骤中始终会产生以下错误: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at breeze.linalg.svd$.breeze$linalg$svd$$doSVD_Double(svd.scala:92)

我试图在一个包含2168列和大量行的行矩阵上执行Spark MLLib PCA(使用Scala)。但是,我观察到,即使矩阵中只有2行(112KB的文本文件),在同一作业步骤中始终会产生以下错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
        at breeze.linalg.svd$.breeze$linalg$svd$$doSVD_Double(svd.scala:92) 
        at breeze.linalg.svd$Svd_DM_Impl$.apply(svd.scala:39) 
        at breeze.linalg.svd$Svd_DM_Impl$.apply(svd.scala:38) 
        at breeze.generic.UFunc$class.apply(UFunc.scala:48) 
        at breeze.linalg.svd$.apply(svd.scala:22) 
        at org.apache.spark.mllib.linalg.distributed.RowMatrix.computePrincipalComponents(RowMatrix.scala:380) 
        at SimpleApp$.main(scala-pca.scala:17) 
        at SimpleApp.main(scala-pca.scala) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
        at java.lang.reflect.Method.invoke(Method.java:601) 
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:569) 
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:166) 
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:189) 
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:110) 
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我还注意到,无论行矩阵中的行数是多少,都可以通过使用1100列或更少的列来纠正此错误

我在21个节点上独立运行Spark 1.3.0,每个节点有12个工作线程和20G内存。我通过
spark submit
提交作业,其中
--驱动程序内存6g
--conf spark.executor.memory=1700m
。在
spark env.sh
中设置以下选项:

SPARK_WORKER_MEMORY=1700M
SPARK_WORKER_CORES=1
SPARK_WORKER_INSTANCES=12
以下是我提交的代码:


是否有其他人在computePrincipalComponents()方法中遇到过此问题?非常感谢您的帮助。

我刚刚遇到了这个问题,解决方法是将
--驱动程序内存增加到2G或更多(如果需要)。

尝试增加并行性:val lData=sc.textFile(dataFilePatter,30)@pzecevic增加并行性没有帮助,相同的错误发生在执行的同一点上。我尝试了0-15000之间的各种并行度。另一件事是,您不需要缓存(),因为您只使用了一次lData(只是说,这可能不会解决您的问题)。第二件事:每个节点有20GB可用空间,但您请求的是12*(1,7GB+JVM开销,可能很大)+OS内存。使用这种设置,每个节点需要大约30GB的容量。您是否尝试将SPARK\u WORKER\u实例设置为较低的值?
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.mllib.linalg.Matrix
import org.apache.spark.mllib.linalg.distributed.RowMatrix
import org.apache.spark.mllib.linalg.{Vector, Vectors}

object SimpleApp {
  def main(args: Array[String]) {
    val datafilePattern = "/path/to/data/files*.txt"
    val conf = new SparkConf().setAppName("pca_analysis").setMaster("master-host")
    val sc = new SparkContext(conf)
    val lData = sc.textFile(datafilePattern).cache()

    val vecData = lData.map(line => line.split(" ").map(v => v.toDouble)).map(arr => Vectors.dense(arr))
    val rmat: RowMatrix = new RowMatrix(vecData)
    val pc: Matrix = rmat.computePrincipalComponents(15)
    val projected: RowMatrix = rmat.multiply(pc)

    println("Finished projecting rows.")
  }
}