Scala 大型文本文件的高效迭代
因此,我有以下几点:Scala 大型文本文件的高效迭代,scala,iterator,bigdata,Scala,Iterator,Bigdata,因此,我有以下几点: val bufferedSource = io.Source.fromFile("""C:\Users\something\workspace\""" + fileName) val lines = bufferedSource.getLines 我想随机选择一个开始索引和一个结束索引,并在打印到新文件时遍历该范围内的行。是否有方法通过索引访问行中的元素 我的第一次尝试是将数据复制到ListBuffer: var lineArr = ListBuffer[String](
val bufferedSource = io.Source.fromFile("""C:\Users\something\workspace\""" + fileName)
val lines = bufferedSource.getLines
我想随机选择一个开始索引和一个结束索引,并在打印到新文件时遍历该范围内的行。是否有方法通过索引访问行中的元素
我的第一次尝试是将数据复制到ListBuffer
:
var lineArr = ListBuffer[String]()
for (line <- lines) {
lineArr += line
}
var lineArr=ListBuffer[String]()
对于(行因此,我没有迭代每一行,而是使用切片解决了这个问题。我仍然创建了一个ListBuffer
,但我在开始和结束索引上切片它:
lineArrTemp = lineArrTemp.slice(start, end)
然后简单地通过ListBuffer
迭代器进行迭代,这是非常有效的。还要考虑迭代器上的zipWithIndex
,因此我们可以根据索引值对行选择进行复杂化;例如,使用
io.Source.fromFile("temp.txt").getLines.zipWithIndex.foreach {
case (line,i) => if (i % 2 == 0) println(line)
}
这里我们一次索引一行,只对文件进行一次迭代。lineArrTemp.iterator()。slice(start,end)
更好。无需创建中间ListBuffer
。或者您可以使用ArrayBuffer
,其中slice
(但不是iterator()。slice
)将更有效。
io.Source.fromFile("temp.txt").getLines.zipWithIndex.foreach {
case (line,i) => if (i % 2 == 0) println(line)
}