かなり大きなファイル (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 アクターの非同期モデルに基づく) を完了するまでに先に進みすぎて、ファイルから grep された値をすぐに取得できないことです (グローバルに利用できるようにしたい)。 .私は値を速く取得する必要がありますが、なぜこのアプローチが私に与えないのか分かりません(複数の未来が並行して動作するため)ので、欠陥を指摘してください.また、複数の値を取得するためのより良いアプローチがある場合かなり大きなファイルからgrepされたことも提案してください。