利用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 条评论
登录 后参与评论

相关文章

来自专栏JackieZheng

漫谈可视化Prefuse(四)---被玩坏的Prefuse API

  这个双12,别人都在抢红包、逛淘宝、上京东,我选择再续我的“漫谈可视化”系列(好了,不装了,其实是郎中羞涩。。。) 上篇《漫谈可视化Prefuse(三)-...

2175
来自专栏韩东吉的Unity杂货铺

零基础入门 34:摄像机跟随目标

hello,今天来抽出时间给大家更新一发,之前有好多同学和我反馈说特别想要一个收藏贴可以分享如何制作摄像机追随目标,经过大家一而再再而三的催促,今天来给大家分享...

1494
来自专栏進无尽的文章

绘图-几个较复杂统计图案例的实现分析

我们可以看到上图的动图是一组组合动画,共有四部分组成:坐标横竖虚线的动画、曲线的动态绘制、小圆点的动画、渐变区域的动画。下面逐个分析

672
来自专栏进击的君君的前端之路

Math对象、数组、日期函数

1295
来自专栏游戏开发那些事

【Unity3d游戏开发】浅谈UGUI中的Canvas以及三种画布渲染模式

  Canvas画布是承载所有UI元素的区域。Canvas实际上是一个游戏对象上绑定了Canvas组件。所有的UI元素都必须是Canvas的自对象。如果场景中没...

631
来自专栏性能与架构

将 Redis 作为图数据库

1. 简介 Redis 在 4.0 中正式支持了Module模块系统,使其可以进行丰富的扩展 图数据库的应用越来越广泛,RedisGraph 就是一个 Redi...

3456
来自专栏King_3的技术专栏

leetcode-190-Reverse Bits

1915
来自专栏文武兼修ing——机器学习与IC设计

开放地址法散列开放地址法代码实现

开放地址法 开放地址法是另一种(相对于分离链接法)解决散列冲突的方法。适用于装填因子(散列表中元素个数和散列表长度比)较小(小于0.5)的散列表。 开放地址法中...

34412
来自专栏Python数据科学

如何用Python递归地思考问题?

递归是一个很经典的算法,在实际中应用广泛,也是面试中常常会提到的问题。本文就递归算法介绍如何在Python中实现递归的思想,以及递归在Python中使用时的一些...

905
来自专栏写代码的海盗

入坑第二式 golang入坑系列

史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/c...

2404

扫码关注云+社区