首页 > 解决方案 > IntelliJ 上的 java.lang.StackOverflowError

问题描述

我是 scala/spark 的新手并加载大小为 2GB 的文件(csv),它在我的虚拟机上运行良好,低于 HEAP_SIZE。

HEAP_SIZE="-Xms8g -Xmx8g"

但是当在 IntelliJ 上运行相同的代码并加载相同的文件时,它会抛出java.lang.StackOverflowError exception. 知道我没有在 IntelliJ 上正确设置内存选项。有人可以帮助我如何以及在哪里设置它,因为我的 Windows 机器上有足够的内存(32GB)?

通过跟踪错误,它完全来自下面的代码,显然在collect.

val lst: Array[String] = expRDD.map((c: tmpClass) => (c.objType, 0))
  .reduceByKey((x: Int, y: Int) => 0)
  .map({ (t: Tuple2[String, Int]) => t._1 })
  .collect

标签: scalaapache-sparkintellij-idea

解决方案


增加堆栈大小可能会有所帮助。您可以在相应的运行/调试配置-Xss4mVM 选项字段中指定。这会将堆栈大小设置为 4M(默认堆栈大小取决于 OS 和 JVM 版本,通常低于 1M)。请注意,如果您的问题是由无限递归引起的,这将无济于事。


推荐阅读