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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
6月前
|
分布式计算 并行计算 大数据
Spark学习---day02、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
Spark学习---day02、Spark核心编程 RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
339 1
|
6月前
|
分布式计算 Java Scala
Spark学习---day03、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
Spark学习---day03、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
|
存储 分布式计算 并行计算
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
|
存储 缓存 分布式计算
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
150 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
|
存储 分布式计算 对象存储
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
|
数据采集 分布式计算 大数据
Rdd 算子_转换_filter | 学习笔记
快速学习 Rdd 算子_转换_filter
105 0
Rdd 算子_转换_filter | 学习笔记
|
分布式计算 算法 大数据
Rdd 算子_转换_mapvalues | 学习笔记
快速学习 Rdd 算子_转换_mapvalues
131 0
Rdd 算子_转换_mapvalues | 学习笔记
|
分布式计算 算法 大数据
RDD 算子_转换_ combineByKey | 学习笔记
快速学习 RDD 算子_转换_ combineByKey
130 0
RDD 算子_转换_ combineByKey | 学习笔记
|
分布式计算 大数据 开发者
RDD 算子_转换_ aggregateByKey | 学习笔记
快速学习 RDD 算子_转换_ aggregateByKey
110 0
RDD 算子_转换_ aggregateByKey | 学习笔记
|
分布式计算 大数据 Scala
RDD 算子_转换_ foldByKey | 学习笔记
快速学习 RDD 算子_转换_ foldByKey
161 0
RDD 算子_转换_  foldByKey | 学习笔记