使用Apache Commons lineIterator时遇到OutOfMemory错误

3
我正在尝试使用Apache Commons的FileUtils.lineIterator逐行迭代一个1.2GB的文件。然而,一旦LineIterator调用hasNext(),我会收到一个java.lang.OutOfMemoryError: Java heap space。我已经为Java堆分配了1G
这里我做错了什么?阅读了一些文档后,难道不是LineIterator应该从文件系统中读取文件,而不是将其加载到内存中吗?
请注意,代码是用Scala编写的:
  val file = new java.io.File("data_export.dat")
  val it = org.apache.commons.io.FileUtils.lineIterator(file, "UTF-8")
  var successCount = 0L
  var totalCount = 0L
  try {
    while ( {
      it.hasNext()
    }) {
      try {
        val legacy = parse[LegacyEvent](it.nextLine())
        BehaviorEvent(legacy)
        successCount += 1L
      } catch {
        case e: Exception => println("Parse error")
      }
      totalCount += 1
    }
  } finally {
    it.close()
  }

感谢您的帮助!
谢谢!

哇,此刻我们的分数完全相同 :) - 3642 - yǝsʞǝla
1
@AlekseyIzmailov 哈哈,我想知道这个的统计巧合率是多少?让我逐行加载StackOverflow数据集给你看吧 :P - crockpotveggies
1个回答

5
代码看起来不错。可能是在文件中没有找到行尾并读取了一个非常长(大于1GB)的行到内存中。
在Unix中尝试使用wc -l,看看你得到了多少行。

1
糟糕,你说得对!我没有意识到它是一行单独的大数据。这是wc -l的结果:0 data_export.dat。我需要重新格式化数据。我会尽快接受这个。谢谢! - crockpotveggies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接