Akka Streams - 根据某些谓词拆分传入的源数据

时间:2016-11-17 05:10:40

标签: scala akka akka-stream

我是Akka Streams框架中的新手,我想知道以Akka Streams为目标解决问题的可能性。 想象一下这是一个问题:

  1. 几个大的迭代源,例如可能有3-4个大文件 相同的数据;
  2. 需要处理每个文件:解析,转换, 计算平均值;
  3. 来自文件的数据应该被分区 一些谓词,然后由分区处理。从运行到运行,分区谓词可以是动态的;
  4. 应保存每个分区 到另一个文件或流,等等。
  5. 是否有可能用Akka Streams解决?

2 个答案:

答案 0 :(得分:5)

您是否考虑过使用Partition

答案 1 :(得分:0)

正如维克多所说,分区会为你做这件事。我在Akka单元测试中找到了一个例子:

 val (s1, s2, s3) = RunnableGraph.fromGraph(GraphDSL.create(Sink.seq[Int], Sink.seq[Int], Sink.seq[Int])(Tuple3.apply) { implicit b ⇒ (sink1, sink2, sink3) ⇒
        val partition = b.add(Partition[Int](3, {
          case g if (g > 3)  ⇒ 0
          case l if (l < 3)  ⇒ 1
          case e if (e == 3) ⇒ 2
        }))
        Source(List(1, 2, 3, 4, 5)) ~> partition.in
        partition.out(0) ~> sink1.in
        partition.out(1) ~> sink2.in
        partition.out(2) ~> sink3.in
        ClosedShape
      }).run()