我开始使用Akka流;我正在尝试创建一个从Web服务读取数据的流,然后将它们保存在S3中。 我想知道,如果我使用Sink.fold方法定义一个Sink(为了收集持久化元素的信息),发送到接收器的元素是一个接一个地处理还是并行处理? / p>
这是一个基本问题,但我无法在文档中找到明确的答案。
答案 0 :(得分:4)
由于Sink.fold
需要先前元素的结果将其与下一个元素组合,因此它必然是顺序的。
实际上它更像是Sink.foldLeft
。
换句话说,如果您使用a, b
作为元素,并使用f
折叠它们,则需要acc = f(zero, a)
才能处理f(acc, b)
。因此,在完成a
的处理之前,无法处理b
。
来自api doc:
一个Sink,它将为每个接收到的元素调用给定函数,为其提供先前的输出(或给定的零值),并将元素作为输入。返回的java.util.concurrent.CompletionStage将在输入流结束时以最终函数求值的值完成,或者如果在流中发出故障则完成,则为失败。