Scala读取和拆分长过程输出

时间:2017-02-20 21:05:32

标签: 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[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。更好的方法是将结果包装在Future中,因为我的数据不是立即需要的。

1 个答案:

答案 0 :(得分:0)

你可以用char迭代每一行char,并跟踪你读过多少个字符将它们分成更小的数组。