Spark 实现TopN的问题(groupBy)

t2.txt
ab 11 
ab 23
ab 13 
ab 44
bb 32
bb 88


// 读取文件
var lines = sc.textFile("/test/t2.txt")
// 对键值进行分组
var ss = lines.map(_.split(" ")).map(f=>(f(0),f(1))).groupBy(f=>f._1)
// 转换成(xx,List(1,23)) 格式 需要转换成整型
var st = ss.map(f=>{var x = f._1;var y=f._2;(x,y.map(_._2.toInt))})
// 得到每个键值前三的数组 格式 (aa,List(122,90,80)) Iterator没有sorted方法所以需要toArray
var result = st.map(f=>{var y = f._2;(f._1,y.toArray.sorted.reverse.take(3))})



groupBy的操作必须对元组进行操作
倒序需要用sorted.reverse结合使用



猜你喜欢

转载自forlan.iteye.com/blog/2377074
今日推荐