Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 大型文本文件的高效迭代_Scala_Iterator_Bigdata - Fatal编程技术网

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) 
}