深入解析:大数据Spark(六十六):Transformation转换算子sample、sortBy和sortByKey

news/2025/10/21 19:22:34/文章来源:https://www.cnblogs.com/lxjshuju/p/19156244

文章目录

Transformation转换算子sample、sortBy和sortByKey

一、sample

二、sortBy

三、sortByKey


Transformation转换算子sample、sortBy和sortByKey

一、sample

随机抽样算子,根据传进去的小数按比例进行有放回或者无放回的抽样,常用于数据预览、测试或处理大规模数据时的抽样分析。sample算子函数签名如下:

def sample(
    withReplacement: Boolean,
    fraction: Double,
    seed: Long = Utils.random.nextLong
): RDD[T]
  • withReplacement:布尔值,表示抽样时是否采用有放回的方式。true 表示有放回抽样,即同一个元素可能被多次抽取;false 表示无放回抽样,每个元素最多被抽取一次。
  • fraction:表示抽样比例。对于无放回抽样,fraction 是期望抽取的样本占原始数据集的比例,取值范围为 [0, 1];对于有放回抽样,fraction 表示每个元素被抽取的期望次数,取值应大于等于 0。
  • seed:可选参数,表示随机数生成器的种子,指定种子可以确保每次抽样结果一致,便于调试和测试。

需求:对数据进行有放回抽样。

Java代码

SparkConf conf = new SparkConf().setMaster("local").setAppName("sample");
JavaSparkContext sc = new JavaSparkContext(conf);
//sample(withReplacement, fraction, seed), withReplacement表示是否放回,fraction表示采样比例,seed表示随机种子
sc.parallelize(Arrays.asList(1,2,3,4,5,6,7,8,9,10)).sample(false,0.5,10).foreach(s -> System.out.println(s));
sc.stop();

Scala代码

val conf = new SparkConf().setMaster("local").setAppName("SampleTest")
val sc = new SparkContext(conf)
//sample(withReplacement, fraction, seed),
//withReplacement表示是否放回,fraction表示抽样的比例,seed表示随机种子
sc.parallelize(1 to 10).sample(false, 0.5,10).foreach(println)
sc.stop()

二、sortBy

sortBy 对任意类型的RDD 中的元素按照指定的键进行排序,需要一个函数来提取排序键,并可以指定升序或降序,以及分区数。函数签名如下:

def sortBy[K](f: (T) => K,ascending: Boolean = true,numPartitions: Int = this.partitions.length
)(implicit ord: Ordering[K], ctag: ClassTag[K]): RDD[T]
  • f:从 RDD 的元素中提取排序键的函数。
  • ascending:布尔值,表示是否按升序排序,默认为 true。
  • numPartitions:排序后 RDD 的分区数,默认为与原始 RDD 相同。

特别注意:Java API中K,V格式RDD没有sortBy操作。

案例:按照字符串长度降序排序。

Java代码:

SparkConf conf = new SparkConf().setMaster("local").setAppName("SortByTest");
JavaSparkContext sc = new JavaSparkContext(conf);
sc.parallelize(Arrays.asList("zhangsan", "lisi", "wangwu", "maliu"))//sortBy:按照字符串长度进行排序.sortBy(new Function() {@Overridepublic Integer call(String s) throws Exception {return s.length();}},true,1).foreach(s -> System.out.println(s ));
sc.stop();

Scala代码:

val conf: SparkConf = new SparkConf().setMaster("local").setAppName("SortByTest")
val sc = new SparkContext(conf)
//sortBy(f, ascending, numPartitions)
//f表示排序的依据,ascending表示是否升序,numPartitions表示分区数
sc.parallelize(List("zhangsan","lisi","wangwu","maliu")).sortBy(_.length).foreach(println)
sc.stop()

三、sortByKey

sortByKey 专用于对键值对 RDD 的键进行排序,可以指定升序或降序,以及分区数。

案例:按照K,V数据中的key大小降序排序。

Java代码:

SparkConf conf = new SparkConf().setMaster("local").setAppName("SortByKeyTest");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaPairRDD rdd = sc.parallelizePairs(Arrays.asList(new Tuple2(10, "zhangsan"),new Tuple2(20, "lisi"),new Tuple2(30, "wangwu"),new Tuple2(40, "maliu")
));
//sortBy:按照字符串长度进行排序
//按照key进行排序,false降序排序
rdd.sortByKey(false).foreach(new VoidFunction>() {@Overridepublic void call(Tuple2 integerStringTuple2) throws Exception {System.out.println(integerStringTuple2);}
});
sc.stop();

Scala代码:

val conf: SparkConf = new SparkConf().setMaster("local").setAppName("SortByKeyTest")
val sc = new SparkContext(conf)
sc.parallelize(List(("a",1),("b",2),("c",3),("d",4)))//sortByKey(ascending, numPartitions)//ascending表示是否升序,numPartitions表示分区数.sortByKey(false).foreach(println)
sc.stop()

  • 博客主页:https://lansonli.blog.csdn.net
  • 欢迎点赞 收藏 ⭐留言 如有错误敬请指正!
  • 本文由 Lansonli 原创,首发于 CSDN博客
  • 停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/942593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:web前端团队开发code review方案最佳实践

完整教程:web前端团队开发code review方案最佳实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

实用指南:免费html网页模板 html5网站模板 静态网页模板

实用指南:免费html网页模板 html5网站模板 静态网页模板pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

最大值的不同统计方法

题目:CF2154B 2154B 题目中有这样一句话: 操作1: 选择一个整数 i 并执行 : 用最大值为 i的前缀替换 $ a_i $ 。 $$ \sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6} $$

加密货币如何改变金融诈骗的游戏规则

本文深入分析加密货币如何被诈骗分子利用实施新型金融犯罪,揭露了包括虚假赠品网站、匿名钱包洗钱、AI深度伪造等最新诈骗手法,并提供了5种实用防护策略保护个人资产安全。加密货币如何改变金融诈骗的游戏规则 加密货…

leetcode448. 找到所有数组中消失的数字

leetcode448. 找到所有数组中消失的数字448. 找到所有数组中消失的数字我的解法:额外数组class Solution {public List<Integer> findDisappearedNumbers(int[] nums) {int n = nums.length;boolean[] flag = n…

远程服务器显示pyQt界面

远程服务器显示pyQt界面1 vscode+mobaxterm实现服务器图形显示 在服务器上跑深度学习任务是有时候会需要可视化图片,但是服务器一般没有图形显示的功能: $ xclock Error: Cant open display: 可以通过 vscode+mobaxt…

揭开 C++ vector 底层面纱:从三指针模型到手写完整实现 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

java的字符和字符串

这是一个非常基础且重要的概念,用一个简单的比喻就很容易理解:字符 (Character): 就像一个“字母”或一个“汉字”。 字符串 (String): 就像一个“单词”或“一句话”。1. 字符 (Character)概念: 它是文本的最小、…

python_日志记录-loguru

日志记录-loguru1 使用 loguru 安装 pip install loguru如何使用 from loguru import loggerlogger.debug("This is a debug message") logger.info("This is an info message") logger.warning(&…

软工第三次作业--结对作业

廖永祺 谭钧灏 3123004628 GitHub项目地址:这个作业属于哪个课程 <班级的链接>这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience/homework/13470这个作业的目标 熟悉小组…

原来用聊天记录就可以创造数字分身!WeClone项目在Lab4AI平台上的复现

通过给大模型喂我们的聊天记录,就可打造出我们的数字分身,当前爆火的Weclone项目采取的就是这种做法。01 | WeClone 如何创造数字分身 拥有一个数字分身可能是很多人的一个愿望。其实通过给大模型喂我们的聊天记录,…

Day1HTML的基本骨架

在vscode中,若是在.html后缀的文件可用快捷键帮助生成骨架,即按!的同时按住回车键或tab键 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta n…

结对项目作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13479这个作业的目标 实…

Java中的注释

单行注释格式: 以 // 开始,直到这一行的末尾。 作用: 用于写一句话的简单说明,或者在某行代码后面加个简短的备注。 // 这是单行注释,电脑会忽略这一整行 int age = 18; // 这也是单行注释,用来解释age变量的含义…

C语言项目开发常用目录结构 - Invinc

本文记录了C语言项目开发中常用的目录结构。本文记录了C语言项目开发中常用的目录结构。C 语言项目的目录规范没有统一标准,但行业中形成了一些通用的目录结构,目的是提高代码可维护性、分离不同类型的文件,尤其适合…

day03-Coze记忆-对话体验

今日内容 1 智能体之记忆(个人记账本) # 1 个人记账本:1 我们每天花费---》传给 智能体2 利用智能体记忆功能--》记录每笔花费3 统计每天花费4 统计每月花费# 2 记忆功能1 变量:常用的东西2 数据库:非常重要 -永久…

2025年流量计厂家权威推荐榜单:电磁流量计、超声波流量计、涡街流量计、质量流量计专业制造商深度解析

2025年流量计厂家权威推荐榜单:电磁流量计、超声波流量计、涡街流量计、质量流量计专业制造商深度解析 在工业自动化与过程控制领域,流量计作为关键测量仪表,其性能与可靠性直接影响生产效率和产品质量。随着智能制…

RNDIS让Air8000的USB上网更智能、更快速!

借助RNDIS协议的智能特性,Air8000的USB上网功能变得更加高效和快速。用户在连接设备时,系统会自动完成网络配置,实现极速上网,提升整体使用体验。 一、Air8000 USB 上网应用概述 本章将带你使用 RNDIS 的方式,搭配…

如果k8s有三个calico节点A,B,C 使用bgp模式的话是如何进行BGP对等会话的

在 Kubernetes 集群中,如果使用 Calico 的 BGP 模式,并且有三个节点 A、B、C,它们之间如何建立 BGP 对等会话,取决于您在 Calico 中配置的 BGP 网络拓扑模式。 Calico 主要支持两种模式来管理这三个节点间的 BGP 会…

2025年栏杆护栏厂家权威推荐榜:不锈钢栏杆、桥梁防撞护栏、河道景观护栏专业制造商精选

2025年栏杆护栏厂家权威推荐榜:不锈钢栏杆、桥梁防撞护栏、河道景观护栏专业制造商精选 随着城市化进程加速和基础设施建设不断完善,栏杆护栏行业迎来了前所未有的发展机遇。作为公共安全的重要保障,各类护栏产品在…