Spark sample入门到精通

Spark 采样是一种从数据集获取随机采样记录的机制,当您拥有较大的数据集并且想要分析/测试数据子集(例如原始文件的 10%)时,这非常有用。

Spark 提供了 RDD、DataFrameDataSet API 上的采样方法来获取样本数据,本文将介绍如何获取随机采样记录以及如何每次运行时获取相同的随机采样,以及更多使用 scala 示例获取更多示例。

数据分析师和数据科学家最常用数据采样来获取数据集子集的统计数据,然后再将其应用于大型数据集。

dataframe 取样

val spark: SparkSession = SparkSession.builder().master("local[1]").appName("SparkByExample")
  .getOrCreate();
val df: Dataset[lang.Long] = spark.range(100)
println(df.count()) //100
//取样10%,但是并不精确,比如这里某次取出来的结果就不是10个
//3,17,40,55,58,66,73,93 而是8个
val sadf: Dataset[lang.Long] = df.sample(withReplacement = false, 0.1)
println(sadf.collect().mkString(","))

取样,要求每次返回相同的结果,就需要设置种子的值

val spark: SparkSession = SparkSession.builder().master("local[1]").appName("SparkByExample")
  .getOrCreate();
val df: Dataset[lang.Long] = spark.range(100)
println(df.count()) //100
//第三个参数代表种子,可以保证每次取样都是相同的结果
//13,34,46,60,68,86,88
val sadf: Dataset[lang.Long] = df.sample(withReplacement = false, 0.1,123)
println(sadf.collect().mkString(","))

取样,如果要求可以重复

val spark: SparkSession = SparkSession.builder().master("local[1]").appName("SparkByExample")
  .getOrCreate();
val df: Dataset[lang.Long] = spark.range(100)
println(df.count()) //100
//取完样后还放回去,就是可以重复取出某个元素,第一个参数设为true
//0,5,9,11,14,14,16,17,21,29,33,41,42,52,52,54,58,65,65,71,76,79,85,96
val sadf: Dataset[lang.Long] = df.sample(withReplacement = true, 0.3,123)
println(sadf.collect().mkString(","))

RDD采样

val spark: SparkSession = SparkSession.builder().master("local[1]").appName("SparkByExample")
  .getOrCreate();
val rdd: RDD[Long] = spark.sparkContext.range(0, 100)
//9,38,40,52,53,57,59,79,88,
//RDD也可以采用,df也可以采样!采样的结果还是个rdd
val sardd: RDD[Long] = rdd.sample(withReplacement = false, 0.1, 0)
println(sardd.collect().mkString(","))
println(rdd.sample(withReplacement = true, 0.3, 123).collect().mkString(","))

规定个数而非规定比例进行取样

val spark: SparkSession = SparkSession.builder().master("local[1]").appName("SparkByExample")
  .getOrCreate();
val rdd: RDD[Long] = spark.sparkContext.range(0, 100)
//takeSample也可以取样,不过返回值不是rdd,是array,另外,第二个参数直接规定取样的个数
//67,96,29,46,34,51,0,40,52,76
val sardd: Array[Long] = rdd.takeSample(withReplacement = false, 10, 123)
println(sardd.mkString(","))

总结

  • rdddataframe都可以进行取样
  • 取样可以设置比例,是否放回等等
  • 取样可以用于数据倾斜的预估

参考

Spark SQL Sampling with Examples — SparkByExamples

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark 3.0从入门精通》课件是针对Apache Spark 3.0版本设计的一套学习教材。Spark是一种快速、可扩展的大数据处理框架,具有高效的数据处理能力和强大的分布式计算功能,被广泛应用于大数据分析和机器学习等领域。 这套课件以入门精通的路径,逐步介绍Spark 3.0的核心概念、基本使用方法和高级特性。首先,课件会对Spark的历史背景、发展现状进行介绍,以及Spark 3.0版本相较之前版本的新特性和改进。接着,课程将深入讲解Spark的核心组件,包括Spark Core、Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX,以及它们在大数据处理和机器学习中的应用。 除了理论知识的传授,课件还会通过大量的实例演示和实践操作,帮助学员快速上手和理解Spark的使用。学员将学习如何使用Spark进行数据读取和处理、数据清洗和转换、数据分析和可视化、机器学习模型构建和评估等任务。同时,课件还会介绍一些高级的Spark特性,如图计算、流处理和分布式机器学习等,以帮助学员进一步提升对Spark的理解和应用能力。 《Spark 3.0从入门精通》课件不仅适合初学者,也适合有一定Spark基础的学员进一步提升技能。通过系统学习课件的内容,学员可以全面掌握Spark的基本原理和使用方法,并能够利用Spark解决实际的大数据处理和机器学习问题。课件还提供了丰富的实验和项目案例,以帮助学员巩固所学知识,并提供进一步的实践指导和学习资源。 总之,《Spark 3.0从入门精通》课件是一套全面系统的学习教材,通过深入浅出的讲解和实践操作,帮助学员快速掌握Spark的核心概念和使用技巧,成为精通Spark的专家。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值