利用Spark RDD实现分组并排序

摘 要

本文将介绍利用Spark RDD实现分组并排序。

前言

被朋友问到Spark分组并排序怎么实现?当时,本人觉得So-Easy的问题。因为在MapReduce也会有类似的需求,相较于MapReduce,那Spark的实现简直简单爆了。but,依然阴沟翻船,具体思路是没有错的,但在纸上描述代码的时候出现了错误,这其实就是归根于用IDE的代价吧。好多东西,不需要刻意的去记忆。反思... ...所以在ide上手动实现了一遍Spark RDD 分组并排序,以示警戒。

思路

思路很简单,就是按照key分组,并且分组完成后将其每组内部进行分组排序。涉及到的算子有两个:groupByKey & mapValues

代码实现

object RDDTest {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("RDDTest")
    val sc = new SparkContext(conf)
    val rdd1 = sc.parallelize(List(("a",1),("a",2),("a",3),("a",4),("b",5),("b",6),("b",7),("b",8)))
    //根据key分组并内部降序
    rdd1.groupByKey().mapValues(f=>{
      //分组内部排序的两种方式
      f.toList.sorted.reverse
     // f.toList.sortWith(_>_)
    }).foreach(println)
    sc.stop()
  }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

原来还有这样的记词方法_Java版记不规则动词_博主推荐

昨天在看一本英语书的不规则动词的时候,突然产生的灵感:就是想把这样记单词简单方式,用程序代码实现,然后,使用户可以与之进行交互

972
来自专栏扎心了老铁

spark三种连接join

本文主要介绍spark join相关操作。 讲述spark连接相关的三个方法join,left-outer-join,right-outer-join,在这之前...

3758
来自专栏Jed的技术阶梯

Spark常用Transformations算子(二)

介绍以下Transformations算子: aggregateByKey join cogroup cartesian pipe repartit...

1204
来自专栏听Allen瞎扯淡

Spark 的惰性运算

作者的意图很简单,就是将RDD中的数据转换为新的数据格式,并统计非法数据的个数。咋一看代码,似乎没有什么问题,可是,这段代码真的能得到正确的结果么?答案是否定的...

7231
来自专栏LhWorld哥陪你聊算法

【Spark篇】---Spark中Action算子

Action类算子也是一类算子(函数)叫做行动算子,如foreach,collect,count等。Transformations类算子是延迟执行,Action...

1282
来自专栏浪淘沙

Spark实现排序

question: 用spark对数据进行排序,首先按照颜值的从高到低进行排序,如果颜值相等,在根据年龄的升序排序

871
来自专栏人工智能LeadAI

Spark常用的算子以及Scala函数总结

上海站 | 高性能计算之GPU CUDA培训 4月13-15日 ? 三天密集式学习 快速带你晋级 阅读全文 > 正文共11264个字,7张图,预计阅读时间28...

59412
来自专栏个人分享

SparkContext源码阅读

SparkContext是spark的入口,通过它来连接集群、创建RDD、广播变量等等。

2162
来自专栏函数式编程语言及工具

Scalaz(26)- Lens: 函数式不可变对象数据操作方式

  scala中的case class是一种特殊的对象:由编译器(compiler)自动生成字段的getter和setter。如下面的例子: 1 case c...

2549
来自专栏木东居士的专栏

Spark源码解析:RDD

5703

扫码关注云+社区

领取腾讯云代金券