Rdd 算子_转换_sample | 学习笔记

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 快速学习 Rdd 算子_转换_sample

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段Rdd 算子_转换_sample】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/689/detail/11969


Rdd 算子_转换_sample


内容介绍:

一、sample 的作用

二、sample filter 的区别

三、sample 的使用

四、第一个参数:withreplacement


一、Sample 的作用

在工作中,可能会拿到一个很大的数据集,就希望是在这个数据集当中抽样出来一部分数据,那变成一个小一点的数据集,然后再去通过小的数据集来进行探索,这样的需求该怎么去实现呢?

首先这个需求有两个最重要的核心点,第一个点就是要把一个大数据集转换成这个小数据集的速度快一些。第2点需要大数据级变成小数据级的同时,同时大数据集的规律,在小数据集里面也有,尽量减少对于数据集特征的这个损失。

那么如果是这样的话,就要进行一些随机的抽样,尽可能的保留原数据的信息的同时,把一个大数据集变成小数据集,从而去增快运行速度,那么如果有这样的需求的话,那么可以试一试一个叫做 sample 的算子,本身也是采样的意思,sample 算子可以从一个数据集当中抽样出来一部分,好减少数据集,以保证运行速度,并且尽可能减少规律的损失,和这个 filter 会稍微有一点点相似,因为都是

image.png

去掉一部分数据,但是这个是随机抽样的一个过程,比如说先来看这样一张图

 

二、sample 与 filter 的区别

首先这个 sample 是不需要接收任何函数,可以通过随机抽样的算法在这个数据集当中抽出了一个2,放在右边的机器当中,而 filter 是是按照一定的函数去指定过滤的规律,然后把一个大数据过滤成小数据形式,而 sample 是没有规律,是随机在进行抽样的,他们作用上也会有很大区别,这个 sample 主要是用作于随机采样,而这个 filter 的使用过滤是不一样的。

 

三、sample 的使用

通过编写代码来讲述 sample 的使用,打开 IDEA,定义一个 sample 的方法,在方法中第一步是定义集合,第二步是过滤数据,第三步是收集数据。

首先 sc.parallelize(Seq(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)),采用最基础的调用方式,定义出一个新的 rdd1,接下来rdd2=rdd1.sample,进入 sample 后,会发现 sample 接受三个参数,withreplacementfraction seed。这个fraction 是指采样比例,比如现有10个元素,要采样处6个元素.这个 fraction 60%,这个 seed 是随机数的种子。seed 一般不指定,前俩个指数会指定的多一些。

eparam withReplacement canelements be sampled multiple times (replaced when sampled out) eparam fraction expected size of the sample as a fraction of this RDD's size

without replacement: probability that each element is chosen; fraction must be [0, 1]

with replacement: expected number of times each element is chosen; fraction must be greater than or equal to 0

eparam seed seed for the random number generator

@note This is NOT guaranteed to provide exactly the fraction of the count

* of the given [[RDD]].

*/

def sample(

withReplacement: Boolean,

fraction:Double,

seed: Long =Utils.random.nextLong): RDD[T] = [

require(fraction >= 0,

s"Fraction must be nonnegative, but got $ffraction")

withScope

require(fraction >= 0.0, "Negative fraction value: "+ fraction)

if (withReplacement) [

new PartitionwiseSampledRDD[T, T]( prev= this, new PoissonSampler[T](fraction), preservesPartitioning=tr )else f

new PartitionwiseSampledRDD[T, T](prev= this, new BernoulliSampler[T](fraction), preservesPartitioning =

)

 

四、第一个参数:withreplacement

想象一下一个米缸里面有一堆米,在里面进行随机取样,取出一粒米之后,那么这一粒米是否还在米缸中,如果在,那么下次取米的时候,还有可能会取到这一粒米。因此第一个参数 replacement 即是否有放回的抽取。

接下来去调用 sample,第一个参数是 replacement 指定为 false,接下来指定 fraction,指定为0.6。去通过 rdd2去取到 result,通过 action size collect,用 result 来进行 printin item。代码完整如下:

@Test

defsample():Unit =[

// 1.定义集合

// 2.过滤数据

// 3.收集结果

valrdd1 = sc.parallelize(Seq(1,2, 3, 4, 5, 6, 7, 8, 9, 10))val rdd2 = rdd1.sample( withReplacement= false, fraction=0.6)val result = rdd2.collect()

result.foreach(item => println(item))

]

运行结果如下:

image.png

有六个数,这六个数并没有重复,因为采样出来数据之后,数据就从元数据中删除掉了,这就是因为 replacement false,永不放回。如果是 replacement 是有放回的,就会连续采集了三次3

Sample 的作用是大数据变小,尽可能的减少数据集规律的损失。参数 withreplacement true,是有放回的采集,为 false,是无放回的采集。

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
机器学习/深度学习 数据采集 存储
时间序列预测新突破:深入解析循环神经网络(RNN)在金融数据分析中的应用
【10月更文挑战第7天】时间序列预测是数据科学领域的一个重要课题,特别是在金融行业中。准确的时间序列预测能够帮助投资者做出更明智的决策,比如股票价格预测、汇率变动预测等。近年来,随着深度学习技术的发展,尤其是循环神经网络(Recurrent Neural Networks, RNNs)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU),在处理时间序列数据方面展现出了巨大的潜力。本文将探讨RNN的基本概念,并通过具体的代码示例展示如何使用这些模型来进行金融数据分析。
1113 2
|
9月前
|
存储 SQL 监控
计算效率提升 10 倍,存储成本降低 60%,灵犀科技基于 Apache Doris 建设统一数据服务平台
灵犀科技早期基于 Hadoop 构建大数据平台,在战略调整和需求的持续扩增下,数据处理效率、查询性能、资源成本问题随之出现。为此,引入 [Apache Doris](https://doris.apache.org/) 替换了复杂技术栈,升级为集存储、加工、服务为一体的统一架构,实现存储成本下降 60%,计算效率提升超 10 倍的显著成效。
391 0
计算效率提升 10 倍,存储成本降低 60%,灵犀科技基于 Apache Doris 建设统一数据服务平台
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
1305 1
什么是语句?什么是表达式?怎么区分?
编程语言中的语句和表达式是基础概念。语句是执行操作或命令的代码行,如Python的`print("Hello, World!")`,通常以换行符结束。表达式则表示值或计算过程,如`2 + 2`,可赋值给变量或用于计算。语句侧重于执行动作,表达式侧重于计算值。表达式可含运算符、变量等,而语句由主语和谓语构成。示例中,`x = 10`和`print("Hello, World!")`是语句,`y = x + 5`和`result = a * b + c`是表达式。
|
人工智能 算法 BI
【经典问题】给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?
【1月更文挑战第26天】【经典问题】给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?
|
SQL Oracle 关系型数据库
MySQL的sql_mode模式说明及设置
MySQL的sql_mode合理设置 sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题. sql model 常用来解决下面几类问题   (1) 通过设置sql mode, 可以完成不同严格程度的数据校验,有效地保障数据准备性。
15168 0
|
存储 Java 分布式数据库
HBase的数据一致性是如何保证的?
HBase的数据一致性是如何保证的?
318 0
|
消息中间件 存储 数据采集
基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(二)数据源
基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(二)数据源
221 0
|
机器学习/深度学习 分布式计算 数据处理
[Spark精进]必须掌握的4个RDD算子之mapPartitions算子
[Spark精进]必须掌握的4个RDD算子之mapPartitions算子
296 0
|
分布式计算 Linux Spark
【已解决】Caused by: java.net.SocketException: Connection reset by peer: socket write error
【已解决】Caused by: java.net.SocketException: Connection reset by peer: socket write error
484 0