From 01d74e7a75963187f5118c8b2bb6ea64f26c5d52 Mon Sep 17 00:00:00 2001 From: subhramit Date: Wed, 8 Apr 2026 05:31:24 +0530 Subject: [PATCH] Force full consumption of DecodingIterable Signed-off-by: subhramit --- .../sorter/syntax/SCollectionSyntax.scala | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/scio-extra/src/main/scala/com/spotify/scio/extra/sorter/syntax/SCollectionSyntax.scala b/scio-extra/src/main/scala/com/spotify/scio/extra/sorter/syntax/SCollectionSyntax.scala index ecdf8b3805..4ea9e53d30 100644 --- a/scio-extra/src/main/scala/com/spotify/scio/extra/sorter/syntax/SCollectionSyntax.scala +++ b/scio-extra/src/main/scala/com/spotify/scio/extra/sorter/syntax/SCollectionSyntax.scala @@ -70,20 +70,13 @@ final class SorterOps[K1, K2: SortingKey, V](self: SCollection[(K1, Iterable[(K2 .applyTransform(SortValues.create[K1, K2, V](options))(coder) .withName("KvToTuple") .map { kv => - val iter = new Iterable[(K2, V)] { - override def iterator: Iterator[(K2, V)] = new AbstractIterator[(K2, V)] { - private[this] val iter = kv.getValue.iterator() - override def hasNext: Boolean = iter.hasNext - - override def next(): (K2, V) = { - val next = iter.next() - (next.getKey, next.getValue) - } - } - - override def toString: String = "" + val iter = kv.getValue.iterator() + val buf = Vector.newBuilder[(K2, V)] + while (iter.hasNext) { + val next = iter.next() + buf += ((next.getKey, next.getValue)) } - (kv.getKey, iter) + (kv.getKey, buf.result(): Iterable[(K2, V)]) }(Coder.beam(c.internal.getCoder)) } }