Scala 不可变流批处理
是否有一种不可变的替代方案可以替代正在讨论的解决方案,该解决方案在一个流中批量处理数据:Scala 不可变流批处理,scala,akka,akka-stream,Scala,Akka,Akka Stream,是否有一种不可变的替代方案可以替代正在讨论的解决方案,该解决方案在一个流中批量处理数据: val records = Source(List( Record(1, "a"), Record(1, "k"), Record(1, "k"), Record(1, "a"), Record(2, "r"), Record(2, "o"), Record(2, "c"), Record(2, "k"), Record(2, "s
val records =
Source(List(
Record(1, "a"),
Record(1, "k"),
Record(1, "k"),
Record(1, "a"),
Record(2, "r"),
Record(2, "o"),
Record(2, "c"),
Record(2, "k"),
Record(2, "s"),
Record(3, "!")
))
.concat(Source.single(Record(0, "notused"))) // needed to print the last element
records
.statefulMapConcat { () =>
var currentTime = 0
var payloads: Seq[String] = Nil
record =>
if (record.time == currentTime) {
payloads = payloads :+ record.payload
Nil
} else {
val previousState = (currentTime, payloads)
currentTime = record.time
payloads = Seq(record.payload)
List(previousState)
}
}
.runForeach(println)
产生
(0,List())
(1,List(a, k, k, a))
(2,List(r, o, c, k, s))
(3,List(!))
在编写并发分布式软件时,不变性和无状态性是一个重要方面。 在使用来自的groupBy时,我将此代码与您的示例代码共享。 如果对你有帮助,请告诉我。 输出类似于
(3,List(!))
(1,List(a, k, k, a))
(2,List(r, o, c, k, s))
可能用fold@cchantep对,大概也是子流,因为褶皱仅在流的末端发射