使用Scala Iterator时出现StackOverflowError

时间:2013-12-10 12:31:35

标签: scala io stack-overflow

我正在尝试将大型数据集(50MB)保存到文件中。但是我收到以下错误:

java.lang.StackOverflowError
at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:350)
at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:350)
...

它看起来像一个递归问题,但我找不到它会来自哪里。请帮助。制作Iterator [String]的函数:

override def toJsonIterator: Iterator[String] = {

  val lastId = listMap.keys.toList.sorted.last

  def evalJS(id: Int): String = {
    Json.prettyPrint(listMap(id).toJsonValue) + (if(id != lastId) "," else "")
  }

  listMap.keys.toList.sorted
    .foldLeft(Iterator("{"))( (sum, id) => sum ++ Iterator(evalJS(id)) ) ++ Iterator("}")
}

保存到文件代码:

private def write(st: Iterator[String], file: String): Unit = {
  if (st.isEmpty) return ()
  val f = new File(file)
  if (!f.getParentFile().exists()) f.getParentFile().mkdirs()
  if (!f.exists()) f.createNewFile()
  val p = new java.io.PrintWriter(f)
  try {
    while(st.hasNext) {
      p.println(st.next())
    }
  }
  catch {
    case e:Exception => println("Error: could not write to file \""+file+"\" because: "+e)
  }
  finally { p.close() }
}

0 个答案:

没有答案