我有变量:
val list= rows.sortBy(- _._2).map{case (user , list) => list}.take(20).mkString("::")
结果println(list)
应为:
60::58::51::48::47::47::45::45::43::43::42::42::42::41::41::41::40::40::40::39
现在我必须处理这些数字(如直方图概念)
如果我设置中断是10,它应该将最大数量(60)除以10并制作6个桶:
(0<x<=10)
之间的范围与0匹配(10<x<=20)
之间的范围与0匹配(20<x<=30)
之间的范围与0匹配(30<x<=40)
之间的范围有4个数字匹配(40<x<=50)
之间的范围有13个数字匹配(50<x<=60)
之间有3个数字匹配然后我必须保存2个变量x
和y
:
x: 0~10::10~20::20~30::30~40::40~50::50~60
y: 0::0::0::4::13::3
我该怎么做?
答案 0 :(得分:1)
val actualList = list.split("::").map(_.toInt).toList
val step = 10
val steps = step to actualList.max by step
//for each step, output a count of all items in the list that are
//between the current step and currentStep - stepVal
val counts = steps.map(x=>actualList.count(y=>y <= x && y > x - step))
val stepsAsString = steps.map(x=>s"${x-step}~$x")
你也可以映射它们:
steps.zip(counts).toMap
请注意,如果首先对列表进行排序,则可以提高性能,但除非您需要,否则我不会担心调整