Один из способов избежать загрузки всего набора данных в массив или список из итератора - использовать foldLeft
для сборки агрегированного Map
.Ниже приведен пример вычисления суммы значений по ключу с помощью foldLeft
от Итератора:
val it = Iterator(("a", 1), ("a", 2), ("b", 3), ("b", 4), ("c", 5))
it.foldLeft(Map.empty[String, Int]){ case (m, (k, v)) =>
m + (k -> (m.getOrElse(k, 0) + v))
}
// res1: scala.collection.immutable.Map[String,Int] = Map(a -> 3, b -> 7, c -> 5)
Re: проблема с groupBy
на Итераторе, вот соответствующая ссылка SO и Scala-lang link .