ошибка памяти spark mllib на svd (одна машина)

У меня есть большой файл данных (около 4 ГБ), и я анализирую его с помощью spark на одном компьютере.

scala> x
res29: org.apache.spark.mllib.linalg.distributed.RowMatrix = org.apache.spark.mllib.linalg.distributed.RowMatrix@5a86096a

scala> x.numRows
res27: Long = 302529

scala> x.numCols
res28: Long = 1828

Когда я пытаюсь вычислить основные компоненты, я получаю ошибку памяти:

scala> val pc: Matrix = x.computePrincipalComponents(2)

     15/03/30 14:55:22 INFO ContextCleaner: Cleaned shuffle 1
    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 $iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC.<init>(<console>:39)

Как я могу это решить?


person Donbeo    schedule 30.03.2015    source источник


Ответы (1)


Если у вас больше оперативной памяти, чем в настоящее время использует Spark, вы можете попытаться увеличить размер кучи Java с помощью параметра командной строки --driver-memory 8g (предполагая здесь «локальный» режим, в котором вычисления выполняются программой-драйвером). По умолчанию только 512м.

person stholzm    schedule 11.04.2015