开发者社区> 问答> 正文

在一个文件中对spark RDD进行排序和排名

我有一个saprkRDD如下

(maths,60)
(english,65)
(english,77)
(maths,23)
(maths,50)
我需要对给定的RDD进行排序和排序如下(数学,23,1)(数学,50,2)(数学,50,3)(英语,65,1)(英语,77,2)

我知道这可以使用数据框轻松完成,但我需要Spark rdd代码来获得解决方案

展开
收起
社区小助手 2018-12-12 11:27:36 3728 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    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))

    2019-07-17 23:20:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载