
Spark sample入门到精通
发布日期:2021-05-18 08:26:14
浏览次数:12
分类:精选文章
本文共 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 提供了丰富的采样方法,使得数据科学家能够灵活应对不同需求。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月15日 18时04分04秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Possible missing firmware
2019-03-14
算法的学习方式
2019-03-14
JAVA BigInteger和BigDecimal类常用方式
2019-03-14
深度学习框架 各种模型下载集合 -- models list
2019-03-14
six.move 的作用
2019-03-14
机器学习全教程
2019-03-14
idea在连接mysql数据库时区错误
2019-03-14
2021-05-14
2019-03-14
Kali-linux:nmap命令
2019-03-14
php端口直驱网络打印机,能自定义格式
2019-03-14
s3c2440 ads程序移植到keil中(一) 初步完成
2019-03-14
工程经济—建设工程定额
2019-03-14
工程经济—工程量清单编制
2019-03-14
1Z204050、施工质量不合格的处理
2019-03-14
1Z308020、民事诉讼制度
2019-03-14
JSP中的九大内置对象
2019-03-14
【字节网盘】九款超好看不同页面404源码
2019-03-14
两款404页面自动跳转源码html
2019-03-14
二改广告横幅在线制作源码 美化版
2019-03-14