Scala读取和拆分长进程输出
在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[
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。更好的办法是在将来总结结果,因为不需要立即使用我的数据。您可以逐字符迭代每一行,并跟踪读取的字符数,将它们拆分为更小的数组。我怀疑这是关键:需要保留整行,并可能动态创建到拆分表示的隐式转换。