scala – 使用`aggregate`合并地图
发布时间:2020-12-16 18:30:52 所属栏目:安全 来源:网络整理
导读:例如,对于任何给定的Map集合, val in = Array( Map("a" - 1,"b" - 2),Map("a" - 11,"c" - 4),Map("b" - 7,"c" - 10)) 如何在in.par上使用聚合以便将地图合并到 Map ( "a" - 12,"b" - 9,"c" - 14 ) 注意已多次询问地图合并,但寻找在并行集合上使用聚合的解决
例如,对于任何给定的Map集合,
val in = Array( Map("a" -> 1,"b" -> 2),Map("a" -> 11,"c" -> 4),Map("b" -> 7,"c" -> 10)) 如何在in.par上使用聚合以便将地图合并到 Map ( "a" -> 12,"b" -> 9,"c" -> 14 ) 注意已多次询问地图合并,但寻找在并行集合上使用聚合的解决方案. 非常感谢 解决方法
如何将seqop和comboop应用于合并?
val in = Array( Map("a" -> 1,"c" -> 10) ) def merge(m1: Map[String,Int],m2: Map[String,Int]): Map[String,Int] = m1 ++ m2.map { case (k,v) => k -> (v + m1.getOrElse(k,0)) } in.par.aggregate(Map[String,Int]())(merge,merge) 更新 您传递给聚合初始累加器值(空映射)和两个闭包 – seqop和comboop. 并行序列在几个分区中分割以并行处理.通过将seqop连续应用于累加器和数组元素来处理每个分区. def seqop( accumulator: Map[String,element: Map[String,Int] = merge(accumulator,element) seqop获取初始累加器值和第一个数组元素并合并它.接下来它将获取前一个结果和下一个数组元素,依此类推,直到整个分区合并到一个映射中. 当每个分区在单独的映射中合并时,应通过应用comboop来组合这些映射. comboop从第一个分区获取合并的映射,从第二个分区获取合并的映射并将它们合并在一起.接下来它需要先前的结果和第三个分区的映射,直到所有内容都合并到一个映射中.这是聚合的结果. def comboop( m1: Map[String,Int] = merge(m1,m2) seqop和comboop是一样的巧合.通常,它们的逻辑和签名不同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |