오늘의 인기 글
최근 글
최근 댓글
Today
Total
04-28 00:01
관리 메뉴

우노

[Spark] java.lang.IllegalArgumentException: requirement failed: dense matrix is too large to allocate , java.lang.NegativeArraySizeException 에러 원인 및 해결 방법 본문

Data/Spark

[Spark] java.lang.IllegalArgumentException: requirement failed: dense matrix is too large to allocate , java.lang.NegativeArraySizeException 에러 원인 및 해결 방법

운호(Noah) 2020. 10. 29. 13:29

에러

  • DenseMatrix를 생성하는 경우

      import org.apache.spark.mllib.linalg.DenseMatrix
    
      val a = DenseMatrix.ones(46341,46341)
    
      java.lang.IllegalArgumentException: requirement failed: 46341 x 46341 dense matrix is too large to allocate
        at scala.Predef$.require(Predef.scala:224)                                                     
        at org.apache.spark.mllib.linalg.DenseMatrix$.ones(Matrices.scala:473)                
  • SparseMatrix를 생성한 후 toDense를 하는 경우

      import org.apache.spark.mllib.linalg.SparseMatrix
      import java.util.Random;
    
      val a = SparseMatrix.sprand(46341,46341,0.0001,new Random(24))
    
      sm.toDense
    
      java.lang.NegativeArraySizeException
        at org.apache.spark.mllib.linalg.Matrix$class.toArray(Matrices.scala:57)
        at org.apache.spark.mllib.linalg.SparseMatrix.toArray(Matrices.scala:574)
        at org.apache.spark.mllib.linalg.SparseMatrix.toDense(Matrices.scala:718)
        ... 49 elided

원인 및 해결 방법

  • DenseMatrix 생성 또는 SparseMatrix → toDense 시, 만들어지는 Matrix의 nnz(요소값)은 Int.MaxValue(21474883647)을 넘어갈 수 없기 때문에 발생하는 에러이다.
  • 단순히 SparseMatrix를 생성할 땐 nnz가 Int.MaxValue를 넘어가지만 않으면 큰 크기 SparseMatrix 생성이 가능하다.
Comments