Answer this question Odomontoisは、あらかじめソートされたストリームをキーでグループ化できるレイジーグループバイ演算子を、メモリにすべて格納することなくグループ化する方法を示しました。 Akkaのストリーム(つまりソースオブジェクト)でこれを行う方法はありますか?代わりに、Akmaソースから通常のStreamオブジェクトを引き出す方法があるので、私はOdomontoisのchopByを使用できますか?Akka StreamsでchopByを実装する
は、ここでは動作しません。これを行うには全く失敗します:
implicit class SourceChopOps[T, NU](s: Source[T, NU]) {
def chopBy[U](f: T => U) = {
s.prefixAndTail(1)
.map(pt => (pt._1.head, pt._2))
.map {
case (prefix, tail) =>
// what to do with pulled off head???
tail.takeWhile(e => f(e) == f(prefix)) ++ tail.dropWhile(e => f(e) == f(prefix)).chopBy(f) // fails here
}
}
}
}
あなたは公式の文書をチェックしましたか? http://doc.akka.io/docs/akka/2.4.9/scala/stream/stream-cookbook.html#implementing-reduce-by-key – fGo
info @fGoありがとうございます。 Akkaグループは、ほとんどの中間データをメモリに保持する必要性をどうにかして回避しますか?返す前にすべてのサブストリームのデータを保持する必要がありますか?それとも、本当にきちんとしたフロー制御トリックでこれをやる必要がないのですか?この前の状態は、chopByの背後にある主な推進力でした。一度に1つのキーだけメモリ内のデータを保持するだけです。 – ChoppyTheLumberjack