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 提供了丰富的采样方法,使得数据科学家能够灵活应对不同需求。

上一篇:spark 读写SequenceFile
下一篇:spark SQL压缩入门

发表评论

最新留言

不错!
[***.144.177.141]2025年04月15日 18时04分04秒