Spark排序之SortBy
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的更多相关文章
- Spark排序与去重遇见的问题
答案: Spark的distinct是通过聚集去重的,可以简单理解为group by去重: 代码1:是先去重之后再排序取limit20是正确的, 代码2:是先排序之后再到各个节点进行去重之后再limi ...
- Spark排序之SortByKey
sortByKey函数作用于Key-Value形式的RDD,并对Key进行排序. package com.test.spark import org.apache.spark.{SparkConf, ...
- Spark排序方式集锦
一.简介 spark中的排序一般可以使用orderBy或sort算子,可以结合负号.ASC/DESC和col进行简单排序.二次排序等情况 二.代码实现 package big.data.analyse ...
- 【Spark篇】---Spark中Transformations转换算子
一.前述 Spark中默认有两大类算子,Transformation(转换算子),懒执行.action算子,立即执行,有一个action算子 ,就有一个job. 通俗些来说由RDD变成RDD就是Tra ...
- spark 算子之RDD
map map(func) Return a new distributed dataset formed by passing each element of the source through ...
- spark中产生shuffle的算子
Spark中产生shuffle的算子 作用 算子名 能否替换,由谁替换 去重 distinct() 不能 聚合 reduceByKey() groupByKey groupBy() groupByKe ...
- Spark Core知识点复习-1
Day1111 Spark任务调度 Spark几个重要组件 Spark Core RDD的概念和特性 生成RDD的两种类型 RDD算子的两种类型 算子练习 分区 RDD的依赖关系 DAG:有向无环图 ...
- spark 机器学习 knn 代码实现(二)
通过knn 算法规则,计算出s2表中的员工所属的类别原始数据:某公司工资表 s1(训练数据)格式:员工ID,员工类别,工作年限,月薪(K为单位) 101 a类 8年 ...
- spark 系列之一 RDD的使用
spark中常用的两种数据类型,一个是RDD,一个是DataFrame,本篇主要介绍RDD的一些应用场景见代码本代码的应用场景是在spark本地调试(windows环境) /** * 创建 spark ...
随机推荐
- Winform 打包 混淆 自动更新
路径: 最终的解决方案是,ConfuserEx+Installshield+AutoUpdater.NET,ConfuserEx做代码混淆工作,Installshield可以解决注册表的问题,Auto ...
- 使用BFG移除git库中的大文件或污点提交
- shell命令行执行python(解析json)
每个脚本都有自己的擅长. 有次实现一个work,使用了shell,php,python看着文件种类多,不方便交接,看着也比较麻烦. 减少文件种类数,也是很有必要的. 遇到的场景:shell程序需要从j ...
- 01-复杂度1 最大子列和问题(剑指offer和PAT)
01-复杂度1 最大子列和问题 (20分) 给定KK个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., N ...
- MSVC 12: compiler error in boost/type_traits/common_type.hpp
来自: https://svn.boost.org/trac10/ticket/11885 MSVC 12: compiler error in boost/type_traits/common_ty ...
- [Java] LinkedHashMap 源码简要分析
特点 * 各个元素不仅仅按照HashMap的结构存储,而且每个元素包含了before/after指针,通过一个头元素header,形成一个双向循环链表.使用循环链表,保存了元素插入的顺序. * 可设置 ...
- 使用SpringBoot配置了 server.servlet.path后无效的解决方案
一.问题描述 使用SpringBoot配置了 server.servlet.path后无效,访问时无法通过:http://127.0.0.1:8080/app/hello.html 访问. 二.解决方 ...
- windows 系统中的 afd 驱动
afd 的全称是 Ancillary Function Driver for WinSock,是 windows 系统网络部分的核心工具.同 Linux 类似,windows 的 socket 最终也 ...
- python3下载图片
import urllib.request import socket import re import sys import os targetDir = r"E:\\DATA\常用py脚 ...
- tmux入门
按键 man tmux和C+b?两个操作可以获得一切. C-b ? 显示快捷键帮助 C-b C-o 调换窗口位置,类似与vim 里的C-w C-b 空格键 采用下一个内置布局 C-b ! 把当前窗口变 ...