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

简介: 快速学习 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的热门话题分析
相关文章
|
6月前
|
人工智能 分布式计算 DataWorks
一体系数据平台的进化:基于阿里云 EMR Serverless Spark 的持续演进
本文介绍了一体系汽配供应链平台如何借助阿里云EMR Serverless Spark实现从传统Hadoop平台向云原生架构的迁移。通过融合高质量零部件供应与创新互联网科技,一体系利用EMR Serverless Spark和DataWorks构建高效数据分析体系,解决大规模数据处理瓶颈。方案涵盖实时数据集成、Lakehouse搭建、数仓分层设计及BI/ML应用支持,显著提升数据处理性能与业务响应速度,降低运维成本,为数字化转型奠定基础。最终实现研发效率提升、运维压力减轻,并推动AI技术深度整合,迈向智能化云原生数据平台。
236 4
什么是语句?什么是表达式?怎么区分?
编程语言中的语句和表达式是基础概念。语句是执行操作或命令的代码行,如Python的`print("Hello, World!")`,通常以换行符结束。表达式则表示值或计算过程,如`2 + 2`,可赋值给变量或用于计算。语句侧重于执行动作,表达式侧重于计算值。表达式可含运算符、变量等,而语句由主语和谓语构成。示例中,`x = 10`和`print("Hello, World!")`是语句,`y = x + 5`和`result = a * b + c`是表达式。
|
存储 分布式计算 负载均衡
OPPO 开源高可用、高性能的 Spark Remote Shuffle Service
大数据计算的兴起,源于 Google 的 MapReduce 论文,MapReduce 的原理很简单,其流程核心则是 Map 和 Reduce 两阶段数据交换,也即 Shuffle。
844 0
OPPO 开源高可用、高性能的 Spark Remote Shuffle Service
|
人工智能 算法 BI
【经典问题】给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?
【1月更文挑战第26天】【经典问题】给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?
|
存储 Java 分布式数据库
HBase的数据一致性是如何保证的?
HBase的数据一致性是如何保证的?
373 0
|
消息中间件 存储 数据采集
基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(二)数据源
基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(二)数据源
247 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
585 0
|
SQL 分布式计算 Hadoop
Hive中not in的正确使用
Hive中not in的正确使用
Hive中not in的正确使用
|
SQL 分布式计算 大数据
Hive动态分区
Hive动态分区
454 0