我想异步读取文件夹中的许多.CSV文件,并返回自定义案例类的Iterable。
我能用Akka Streams实现这个目标吗?
*我试图以某种方式根据文档平衡工作,但它有点难以管理...
或者
使用Actors是一个好习惯吗?(带有子节点的父Actor,每个孩子读取一个File,然后将Iterable返回给父节点,然后父节点组合所有Iterables?)
答案 0 :(得分:3)
与@paul答案大致相同,但改进很小
{"a":["1","2","3","4","5","6"]}
4
4
No such node (b)
index out of bounds
答案 1 :(得分:1)
首先,您需要阅读/了解Akka流如何工作,包括Source,Flow和Sink。然后你就可以开始学习操作员了。
要并行执行多个操作,您可以使用运算符mapAsync
在其中指定并行数。
/**
* Using mapAsync operator, we pass a function which return a Future, the number of parallel run futures will
* be determine by the argument passed to the operator.
*/
@Test def readAsync(): Unit = {
Source(0 to 10)//-->Your files
.mapAsync(5) { value => //-> It will run in parallel 5 reads
implicit val ec: ExecutionContext = ActorSystem().dispatcher
Future {
//Here read your file
Thread.sleep(500)
println(s"Process in Thread:${Thread.currentThread().getName}")
value
}
}
.runWith(Sink.foreach(value => println(s"Item emitted:$value in Thread:${Thread.currentThread().getName}")))
}
了解有关akka和akka流的更多信息