Spark 二次排序

Stella981
• 阅读 635

遇到这样的场景,有一个文本里的字段是:日期,名字,数据。需要对名字和日期进行排序,大概的思路就是先将名字排序(其实准确来说是分组),再将日期排序。可以使用下面的方案。

文本

60 53
70 58
20 21
50 51
50 54
60 51

代码

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

object TwoSort {
  def main(args: Array[String]): Unit = {
      val conf = new SparkConf().setAppName("twosort").setMaster("local")
      val sc = new SparkContext(conf)
       
      val file = sc.textFile("file:///d:/test_data/twosort.txt")
          //排序并二次排序
      val rdd_group = file.map(line => line.split(" ")).map(x => (x(0),x(1))).groupByKey()
      var rdd = rdd_group.sortByKey(true).map(x => (x._1, x._2.toList.sortWith(_>_)))

      
    //按照二元组格式输出
     val rdd2=rdd.flatMap{
      x =>
       val len=x._2.length
       val arr=new Array[(String,String)](len)
        for(i <- 0 until len){
          arr(i)=(x._1,x._2(i))
        }
        arr
    }
    rdd2.foreach(println)
    sc.stop()
  }
}

结果

(20,21)
(50,54)
(50,51)
(60,53)
(60,51)
(70,58)
点赞
收藏
评论区
推荐文章
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
mysql 查询近7天数据,缺失补0
相信很多人的项目都有这种需求,就是查询近7天的记录,但是这7天总有那么几天是没数据的,所以缺失的只能补0 下面的代码不知道能不能看懂,我简单的说一下思路1)先查询红色字体的近7天,再转换成日期2)我的字段使用的是时间戳的方式去保存,只能是先数据库字段先转日期2.1)先查询自己想要的数据,用每天分组,计算好总数后2.2)时间戳字段先转日期
Wesley13 Wesley13
3年前
Mysql order by与limit混用陷阱
在Mysql中我们常常用orderby来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select\from表名orderby排序字段limtM,N。但是这种写法却隐藏着较深的使用陷阱。在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致的问题。比如现在有一张user表,表结构及数据如下:
Stella981 Stella981
3年前
Mybatisplus实现在不分页时进行排序操作以及用分页接口实现全量查询
优化分页插件实现在不分页时进行排序操作原生mybatisplus分页与排序是绑定的,mpp优化了分页插件,使用MppPaginationInterceptor插件<br在不分页的情况下支持排序操作<brpage参数size设置为1可实现不分页取全量数据,同时设置OrderItem可以实现排序<br使用MppPaginationInt
Stella981 Stella981
3年前
Hadoop案例(八)辅助排序和二次排序案例(GroupingComparator)
辅助排序和二次排序案例(GroupingComparator)1.需求有如下订单数据订单id商品id成交金额0000001Pdt\_01222.80000001Pdt\_0525.80000002Pdt\_03522.80000
Stella981 Stella981
3年前
Lua 排序算法
冒泡排序(BubbleSort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法步骤1.有一个长度为n
菜园前端 菜园前端
1年前
排序和搜索介绍
原文链接:排序和搜索不仅在工作中会经常遇到,在面试中也是高频考点,所以这个是必须要懂的。排序:把某个乱序的数组变成升序或者降序的数组。例如在我们平常开发中,例如要对一个表格进行日期的升序或降序排列。在JavaScript中通常使用数组的sort方法实现。搜
菜园前端 菜园前端
1年前
什么是冒泡排序
原文链接:什么是冒泡排序(bubbleSort)?冒泡排序是所有排序算法中最简单的一种,当然也是性能最差的一种。冒泡排序的思想其实很简单,就如它的名字一样在水中"冒泡"。水中有很多散乱的小气泡,然后一个个气泡往水面上冒出。例如一组无序的数组,最左边就是水底
小万哥 小万哥
11个月前
深入了解 Python MongoDB 操作:排序、删除、更新、结果限制全面解析
PythonMongoDB排序对结果进行排序使用sort()方法对结果进行升序或降序排序。sort()方法接受一个参数用于“字段名”,一个参数用于“方向”(升序是默认方向)。示例按名称按字母顺序对结果进行排序:pythonimportpymongomycl