【发布时间】:2018-05-10 22:33:39
【问题描述】:
我有一个元组列表:
val serverList = List(
("AS-4019", 100),
("BR-5722", 2080),
("SQ-9985", 70),
("BR-5722", 82),
("BR-5722", 147),
("AS-4019", 7),
("SQ-9985", 29),
("AS-4019", 64),
("SQ-9985", 93),
("GN-1070", 1408),
("BR-5722", 19),
("GN-1070", 7798))
字符串是服务器标识符,数字与服务器负载有关,每个元组代表一个访问服务器的项目。
我需要将此列表聚合为:
List(serverNameString, accessCountInt, serverLoadInt)
结果应该是这样的:
List(
("AS-4019", 3, 171),
("BR-5722", 4, 2328),
("SQ-9985", 3, 192),
("GN-1070", 2, 9206))
我尝试过使用一些地图和过滤器,但它似乎过于复杂而且也不起作用。
val aggregatedList = for(v <- lisinputt.distinct) {
(v, lisinputt.groupBy(identity).mapValues(_.size)(v))
}
【问题讨论】:
-
serverList.groupBy(_._1).map {case (key, values) => (key, values.length, values.map(_._2).sum) } -
@XavierGuihot 一个非常干净简洁的解决方案。