【发布时间】:2017-02-06 01:36:17
【问题描述】:
README 中的例子非常优雅:
scala> Map(1 -> Max(2)) + Map(1 -> Max(3)) + Map(2 -> Max(4))
res0: Map[Int,Max[Int]] = Map(2 -> Max(4), 1 -> Max(3))
这里使用的Map基本上相当于SQL的group by。
但是我如何对任意聚合器做同样的事情呢?例如,要实现与上面的代码相同的事情(但没有Max 包装类):
scala> import com.twitter.algebird._
scala> val mx = Aggregator.max[Int]
mx: Aggregator[Int,Int,Int] = MaxAggregator(scala.math.Ordering$Int$@78c77)
scala> val mxOfMap = // what goes here?
mxOfMap: Aggregator[Map[Int,Int],Map[Int,Int],Map[Int,Int]] = ...
scala> mxOfMap.reduce(List(Map(1 -> 2), Map(1 -> 3), Map(2 -> 4)))
res0: Map[Int,Int] = Map(2 -> 4, 1 -> 3)
换句话说,我如何将对T 类型的值进行操作的聚合器转换(或“提升”)为对Map[K,T] 类型的值进行操作的聚合器(对于某些任意K)?
【问题讨论】: