我有一个saprkRDD如下
(maths,60)
(english,65)
(english,77)
(maths,23)
(maths,50)
我需要对给定的RDD进行排序和排序如下(数学,23,1)(数学,50,2)(数学,50,3)(英语,65,1)(英语,77,2)
我知道这可以使用数据框轻松完成,但我需要Spark rdd代码来获得解决方案
SparkRDD函数(所谓的转换)groupByKey flatMap和ScalaList函数一样sorted应该有助于实现它。
val rdd = spark.sparkContext.parallelize(
Seq(("maths",60),
("english",65),
("english",77),
("maths",23),
("maths",50)))
val result = rdd.groupByKey().flatMap(group => {
group._2.toList
.sorted.toList // sort marks
.zipWithIndex // add the position/rank
.map {
case(marks, index) => (group._1, marks, index + 1)
}
})
result.collect
// Array((english,65,1), (english,77,2), (maths,23,1), (maths,50,2), (maths,60,3))
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。