sortBy函数源码:接收三个参数,第一个参数必须,第二个和第三个参数非必要

def sortBy[K](

f: (T) => K,

ascending: Boolean = true,

numPartitions: Int = this.partitions.length)

(implicit ord: Ordering[K], ctag: ClassTag[K]): RDD[T] = withScope {

this.keyBy[K](f)

.sortByKey(ascending, numPartitions)

.values

}

1、例子1:按照value进行降序排序

package com.test.spark
import org.apache.spark.{SparkConf, SparkContext} /**
* @author admin
* SortBy是SortByKey的增强版
* 按照value进行排序
*/
object SparkSortByApplication { def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("SortSecond").setMaster("local[1]")
val sc = new SparkContext(conf)
val datas = sc.parallelize(Array(("cc",12),("bb",32),("cc",22),("aa",18),("bb",16),("dd",16),("ee",54),("cc",1),("ff",13),("gg",32),("bb",4)))
// 统计key出现的次数
val counts = datas.reduceByKey(_+_)
// 按照value进行降序排序
val sorts = counts.sortBy(_._2,false)
sorts.collect().foreach(println)
  sc.stop()
} }

输出结果:

(ee,54)
(bb,52)
(cc,35)
(gg,32)
(aa,18)
(dd,16)
(ff,13)

2、例子2:先按照第一个元素升序排序,如果第一个元素相同,再进行第三个元素进行升序排序

package com.sudiyi.spark
import org.apache.spark.{SparkConf, SparkContext} /**
* @author xubiao
* SortBy是SortByKey的增强版
* 先按照第一个,再按照第三个元素进行升序排序
*/
object SparkSortByApplication { def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("SortSecond").setMaster("local[1]")
val sc = new SparkContext(conf)
val arr = Array((1, 6, 3), (2, 3, 3), (1, 1, 2), (1, 3, 5), (2, 1, 2))
val datas2 = sc.parallelize(arr)
val sorts2 = datas2.sortBy(e => (e._1,e._2))
sorts2.collect().foreach(println) sc.stop() } }

输出结果:

(1,1,2)
(1,3,5)
(1,6,3)
(2,1,2)
(2,3,3)

Spark排序之SortBy的更多相关文章

  1. Spark排序与去重遇见的问题

    答案: Spark的distinct是通过聚集去重的,可以简单理解为group by去重: 代码1:是先去重之后再排序取limit20是正确的, 代码2:是先排序之后再到各个节点进行去重之后再limi ...

  2. Spark排序之SortByKey

    sortByKey函数作用于Key-Value形式的RDD,并对Key进行排序. package com.test.spark import org.apache.spark.{SparkConf, ...

  3. Spark排序方式集锦

    一.简介 spark中的排序一般可以使用orderBy或sort算子,可以结合负号.ASC/DESC和col进行简单排序.二次排序等情况 二.代码实现 package big.data.analyse ...

  4. 【Spark篇】---Spark中Transformations转换算子

    一.前述 Spark中默认有两大类算子,Transformation(转换算子),懒执行.action算子,立即执行,有一个action算子 ,就有一个job. 通俗些来说由RDD变成RDD就是Tra ...

  5. spark 算子之RDD

    map map(func) Return a new distributed dataset formed by passing each element of the source through ...

  6. spark中产生shuffle的算子

    Spark中产生shuffle的算子 作用 算子名 能否替换,由谁替换 去重 distinct() 不能 聚合 reduceByKey() groupByKey groupBy() groupByKe ...

  7. Spark Core知识点复习-1

    Day1111 Spark任务调度 Spark几个重要组件 Spark Core RDD的概念和特性 生成RDD的两种类型 RDD算子的两种类型 算子练习 分区 RDD的依赖关系 DAG:有向无环图 ...

  8. spark 机器学习 knn 代码实现(二)

    通过knn 算法规则,计算出s2表中的员工所属的类别原始数据:某公司工资表 s1(训练数据)格式:员工ID,员工类别,工作年限,月薪(K为单位)       101       a类       8年 ...

  9. spark 系列之一 RDD的使用

    spark中常用的两种数据类型,一个是RDD,一个是DataFrame,本篇主要介绍RDD的一些应用场景见代码本代码的应用场景是在spark本地调试(windows环境) /** * 创建 spark ...

随机推荐

  1. Mysql启动失败

    错误提示: 服务名无效 错误原因: mysql服务没有安装. 解决方法: 管理员的权限运行cmd 用dos命令进入到mysql安装目录下再进入到bin目录下 运行mysqld -install命令

  2. Ansible修改自定义端口和登录用户

    如下所示: [servers] host1 ansible_ssh_host=192.0.2.1 ansible_ssh_port=5555 ansible_ssh_user="user&q ...

  3. 手机号是SIM卡的号呢,还是买手机时就带的

    可以用原来的号码!把原来的卡装在新手机里就可以了,你的号码没有改变! 手机的号是由sim卡来决定的! 但是卡上的号码显示的是卡的一些信息! 你不用去理会它! 全文:http://iask.sina.c ...

  4. css3 transition属性实现3d动画效果

    transition属性是一个很强大的3d动画属性,我动手试了一下,很多在网上很火的网页动画都可以用这个属性实现,只能说这个属性是在是太强大啦,本人在学习次属性之后才知道自己对css3的认识还是偏少, ...

  5. Miscellaneos:ISV

    ylbtech-Miscellaneos:ISV ISV英文全称是Independent Software Vendors ,意为“独立软件开发商”,特指专门从事软件的开发.生产.销售和服务的企业,如 ...

  6. React页面隐藏#

    将 hashHistory 改为 browserHistory 路由用到的,可以在routes.jsx上把hashHistory 改成browserHistory https://github.com ...

  7. 解决IE6-IE8 Js代码不执行问题

    一种可能的原因:form标签不完整. 使用在线工具,测试html代码标签的完整性.

  8. MySql之插入操作

    一:插入一行数据 INSERT INTO tableName(列名...) VALUES(对应列名的值); 二:插入多行 INSERT INTO tableName(列名...) VALUES(对应列 ...

  9. Variable used in lambda expression should be final or effectively final

    Lambda与匿名内部类在访问外部变量时,都不允许有修改变量的倾向,即若: final double a = 3.141592; double b = 3.141592; DoubleUnaryOpe ...

  10. Hardware Monitor for Mac(硬件运行状态监测工具)破解版安装

    1.软件简介    Hardware Monitor 是 macOS 系统上一款 mac 硬件检测软件,同时还可以示硬盘.显卡温度以及电池电压等等监控信息.Hardware Monitor for M ...