如何在scala列表中使用group by? 我是初学者在我的代码中获取一些记录列表,我想在列表中使用group by。这是我的列表示例
List((smith,swarm_4,group_2,400,1200), (smith,swarm_5,group_2,400,1200),
(Michel,swarm_4,group_2,400,400), (smith,swarm_6,group_3,400,1200),
(smith,swarm_7,group_3,400,1200), (Michel,swarm_4,group_2,300,200),
(Michel,swarm_5,group_2,400,400), (Michel,swarm_6,group_3,400,400),
(Michel,swarm_7,group_3,400,400), (smith,swarm_5,group_2,100,200)
)
假设列表包含此格式的记录(名称:String,swarm:String,group:String,Tx:Long,Rx:Long)。 我想分组(群组和群组),群组匹配然后聚合(Tx + Tx)和(Rx + Rx)。
例如:
(smith,swarm_5,group_2,400,1200) and (smith,swarm_5,group_2,100,200) ==>
((swarm_5,group_2) => (400+100, 1200+200) => output(smith,swarm_5,group_2,500,1400))
使输出变得像
List((smith,swarm_4,group_2,400,1200), (smith,swarm_5,group_2,500,1400),
(Michel,swarm_4,group_2,700,600), (smith,swarm_6,group_3,400,1200),
(smith,swarm_7,group_3,400,1200), (Michel,swarm_5,group_2,400,400),
(Michel,swarm_6,group_3,400,400), (Michel,swarm_7,group_3,400,400))
请建议我在scala编码中使用group by或任何其他想法。
答案 0 :(得分:1)
此代码适用于您的指定列表
var outList = inList.map( x => ((x._1,x._2,x._3),x._4,x._5)))
.groupBy(_._1)
.map{case (key,value) =>
value.reduce( (x,y) => (x._1,(x._2._1+y._2._1,x._2._2+y._2._2) ) )};