Group Top Key
Key的前几个值,类似MapReduce中的二次排序
1)按照第一个字段进行分组
2)对分组中的第二个字段进行排序
3)获取每个分组TOP N,比如获取前三个值
文件内容
aa 78
bb 89
cc 90
bb 45
aa 89
aa 67
cc 87
bb 38
cc 78
cc 67
aa 90
bb 23
aa 84
结果
(aa,List(90, 89, 84))
(bb,List(89, 45, 38))
(cc,List(90, 87, 78))
代码
objectGroupTopByKey {
defmain(args: Array[String]) {
valconf = newSparkConf().setAppName("group").setMaster("local")
valsc = newSparkContext(conf)
valgroupFile = sc.textFile("C://Users/Administrator.USER-20160724HY/Desktop/1.txt")
.map(_.split(" "))//对读取的文件进行分割
.map(x => (x(0),x(1)))//映射成数组
.groupByKey.map(//根据key进行分组
x => {
valxx = x._1//获取key值 aa bb cc
valyy = x._2//获取value值 89 28 12 结果是一个迭代器
(xx,yy.toList//将迭代器转换成list集合
.sorted.reverse//对集合进行排序,并降序
.take(3))//取value前3个值
}
)
//print(groupFile)
groupFile.saveAsTextFile("C://Users/Administrator.USER-20160724HY/Desktop/5") //文件保存到本地
}
}
Key的前几个值,类似MapReduce中的二次排序
1)按照第一个字段进行分组
2)对分组中的第二个字段进行排序
3)获取每个分组TOP N,比如获取前三个值
文件内容
aa 78
bb 89
cc 90
bb 45
aa 89
aa 67
cc 87
bb 38
cc 78
cc 67
aa 90
bb 23
aa 84
结果
(aa,List(90, 89, 84))
(bb,List(89, 45, 38))
(cc,List(90, 87, 78))
代码
objectGroupTopByKey {
defmain(args: Array[String]) {
valconf = newSparkConf().setAppName("group").setMaster("local")
valsc = newSparkContext(conf)
valgroupFile = sc.textFile("C://Users/Administrator.USER-20160724HY/Desktop/1.txt")
.map(_.split(" "))//对读取的文件进行分割
.map(x => (x(0),x(1)))//映射成数组
.groupByKey.map(//根据key进行分组
x => {
valxx = x._1//获取key值 aa bb cc
valyy = x._2//获取value值 89 28 12 结果是一个迭代器
(xx,yy.toList//将迭代器转换成list集合
.sorted.reverse//对集合进行排序,并降序
.take(3))//取value前3个值
}
)
//print(groupFile)
groupFile.saveAsTextFile("C://Users/Administrator.USER-20160724HY/Desktop/5") //文件保存到本地
}
}