博客
关于我
Spark sample入门到精通
阅读量:649 次
发布时间:2019-03-15

本文共 1775 字,大约阅读时间需要 5 分钟。

Spark 采样是一种从数据集中获取随机采样记录的机制,特别适用于拥有较大数据集的场景。对于数据分析师和数据科学家来说,数据采样是获取数据子集统计数据的常用方法,尤其是在应用于大型数据集时。

DataFrame 取样

在 Spark 中,DataFrame 的采样可以通过 sample 方法实现,该方法的实现可以指定是否放回以及随机性。以下是一个使用Scala实现的示例:

import org.apache.spark.sql.SparkSessionimport org.apache.spark.sql.Datasetval spark = SparkSession.builder().master("local[1]").appName("SparkByExample").getOrCreate()val df = spark.range(100)println(df.count()) // 输出: 100// 随机采样 10%,不放回val sadf = df.sample(withReplacement = false, 0.1)println(sadf.collect().mkString(",")) // 可能的输出示例:8,3,17,40,55,58,66,73,93// 设置随机种子以确保每次采样结果一致性val sadf = df.sample(withReplacement = false, 0.1, 123)println(sadf.collect().mkString(",")) // 输出示例:13,34,46,60,68,86,88// 允许重复抽取(有放回)val sadf = df.sample(withReplacement = true, 0.3, 123)println(sadf.collect().mkString(",")) // 输出示例:0,5,9,11,14,14,16,17,21,29,33,41,42,52,52,54,58,65,65,71,76,79,85,96

RDD 采样

除了 DataFrame,RDD 也可以进行采样操作。一种常用的方法是使用 takeSample 方法来指定抽样的数量和是否允许重复:

import org.apache.spark.rdd.RDDimport org.apache.spark.SparkContextval spark = SparkSession.builder().master("local[1]").appName("SparkByExample").getOrCreate()val rdd = spark.sparkContext.range(0, 100)// 随机采样 10%,不放回val sardd = rdd.sample(withReplacement = false, 0.1, 123)println(sardd.collect().mkString(",")) // 输出示例:67,96,29,46,34,51,0,40,52,76// 允许重复抽取(有放回)val sardd = rdd.sample(withReplacement = true, 0.3, 123)println(sardd.collect().mkString(",")) // 输出示例:44,5,37,31,55,20,53,89,95,63

指定抽样数量

对于 RDD 或 DataFrame,若想指定抽样数量而非比例,可以直接使用 takeSample 方法:

val sardd = rdd.takeSample(withReplacement = false, 10, 123)println(sardd.mkString(",")) // 输出示例:52,27,17,37,19,65,28,93,45,83

总结

  • 核心功能:RDD 和 DataFrame 都支持复杂的采样配置,包括比例和重复抽取选项。
  • 随机性控制:通过设置随机种子,可以确保每次抽样结果一致性。
  • 应用场景:采样是数据倾斜预估和集样本分析的重要工具。

此外,Spark 提供了丰富的采样方法,使得数据科学家能够灵活应对不同需求。

转载地址:http://akpmz.baihongyu.com/

你可能感兴趣的文章
scala Tuple入门到熟悉
查看>>
RDD partitioner入门详解
查看>>
presto查询报错
查看>>
superset报错
查看>>
Hive 分组取Top N
查看>>
yarn开启Label Scheduler
查看>>
Spark sample入门到精通
查看>>
C++ Primer Plus【复习笔记】-【复合类型】
查看>>
前端一些要会的知识点
查看>>
VUE +ElementUI form表单回车提交
查看>>
使用Spring AOP应该注意的一个小细节
查看>>
学习Swoole之进程队列之间通信
查看>>
docker 快速安装bcmath扩展
查看>>
2020-08-26
查看>>
shell脚本一键删除php7.4.8
查看>>
vue 基础之计算属性
查看>>
nginx服务器部署Thinkphp 5.1框架报404解决方案
查看>>
Tomcat内存溢出解决方案
查看>>
上传按钮的设计
查看>>
诡异现象使用Validator表单验证时 return back()->withErrors()在视图无法获取错误信息
查看>>