Scala读取和拆分长进程输出

Scala读取和拆分长进程输出,scala,concurrency,process,pipe,Scala,Concurrency,Process,Pipe,在scala中,读入以逗号分隔的长文件并将其转换为数组序列的“最佳”方法是什么 我曾经这样想过: import scala.sys.process._ val cmdList = List("perl","-e","""print join(",",map { rand } (1..5))."\n" foreach (1..500000)"""); val data = { val listBuffer = scala.collection.mutable.ListBuffer[Array[

在scala中,读入以逗号分隔的长文件并将其转换为数组序列的“最佳”方法是什么

我曾经这样想过:

import scala.sys.process._
val cmdList = List("perl","-e","""print join(",",map { rand } (1..5))."\n" foreach (1..500000)""");
val data = {
  val listBuffer = scala.collection.mutable.ListBuffer[Array[String]]()
  cmdList.lineStream_!.foreach { (line) => listBuffer += line.split(",") }
  listBuffer.toList
}
是合适的,但在我的scala REPL盒子上,我得到

java.lang.OutOfMemoryError: GC overhead limit exceeded
  at java.util.Arrays.copyOfRange(Arrays.java:2694)

我想一条一条地加工生产线。我使用的是scala 2.11.7。更好的办法是在将来总结结果,因为不需要立即使用我的数据。

您可以逐字符迭代每一行,并跟踪读取的字符数,将它们拆分为更小的数组。

我怀疑这是关键:需要保留整行,并可能动态创建到拆分表示的隐式转换。