在Scala中同时读取多个文本文件

时间:2014-08-01 18:30:11

标签: scala io parallel-processing text-files

给定要读取和处理的文件名集合,例如,

val inFilenames = (1 to 100).map(n => s"file$n.txt")

如何同时阅读所有100文本文件,以便

def processFile[A](inFilename: String, f: => A): Int 

可以同时调用100次?

非常感谢

1 个答案:

答案 0 :(得分:3)

似乎可以使用Future s解决一些问题:

def processFile[A](inFilename: String, f: => A): Int = ???

def someFunction[A]: A = ???

val inFilenames = (1 to 100).map { n => s"file$n.txt" }

val futures: List[Future[Int]] = 
  inFilenames.map(file => Future(processFile(file, someFunction))).toList

这将创建一个List,其中包含100 Future秒。期货在声明后立即开始运行,以检索结果,您可以使用onCallback添加Await.result(futures)方法或块(未建议),它将以更紧凑的形式出现:

inFilenames.map(file => Future(processFile(file, someFunction)).onComplete {
  case Success(res) => println(res)
  case Failure(e) => println("failure: " + e.getMessage)
})