우노
[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 생성이 가능하다.
'Data > Spark' 카테고리의 다른 글
Comments