博客
关于我
Spark sample入门到精通
阅读量:651 次
发布时间: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/

你可能感兴趣的文章
Error:Cannot read packageName from AndroidManifest.xml
查看>>
【自学Flutter】4.1 Material Design字体图标的使用(icon)
查看>>
【换行符】什么时候用cin.get()吃掉输入流中的换行符
查看>>
广东外语外贸大学第三届网络安全大赛Writeup
查看>>
SpringBoot使用RedisTemplate简单操作Redis的五种数据类型
查看>>
Thymeleaf sec:authorize 标签不生效
查看>>
微信JS-SDK DEMO页面和示例代码
查看>>
一张图搞定RPC框架核心原理
查看>>
他来了他来了,他带着云栖大会的免费门票走来了
查看>>
获取linux 主机cpu类型
查看>>
测试tensorflow是否安装成功 出现 SyntaxError: invalid syntax的错误
查看>>
Flask--简介
查看>>
16 python基础-恺撒密码
查看>>
Frame--Api框架
查看>>
Boostrap技能点整理之【网格系统】
查看>>
javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
查看>>
Git简单理解与使用
查看>>
echarts 基本图表开发小结
查看>>
adb通过USB或wifi连接手机
查看>>
JDK9-15新特性
查看>>