我有一个相当大的文件(20-30 Mb)。我有一个映射,其中有一个键和相应的正则表达式作为值,我需要在文件中 grep 以获取键的实际值并将新键、值存储在新映射中。所以这是我的方法
contextmap //initial map which contains key and value in form of regex
contextstrings // final map supposed to have value after the grep
def fgrepFuture(e: (String,String)) = Future {
val re = new Regex(e._2)
Source.fromFile(f).getLines.foreach {
re findFirstMatchIn _ match {
case None => ("","")
case Some(x) =>(e._1,x.group(1))
}
}
}
val fg = Future.traverse(tmpmap)(fgrepFuture)
fg onComplete{
case tups => for(t <- tups) contextstrings += (t.toString.split(",").head -> t.toString.split(",").tail.head)
}
这里的问题是,当未来完成我的其余代码(基于 akka 演员的异步模型)时,我没有快速获得文件中的 grepped 值(我希望在全球范围内可用) .我需要快速获得价值,我不知道为什么这种方法没有给我(因为多个未来并行工作),所以请指出缺陷。另外,如果有更好的方法来获得多个价值从一个相当大的文件中提取,请也提出建议。