spark3.0教程:RDD转换算子sample()

说明

根据指定的规则从数据集中抽取数据

应用场景

经过 filter、groupBy 算子运算后,数据可能会出现倾斜(即:某个分区的数据量特别大),通过sample算子采样出一份样本来

声明

def sample(
  withReplacement: Boolean,
  fraction: Double,
  seed: Long = Utils.random.nextLong): RDD[T]

参数:

  • withReplacement:

    • true:为泊松算法,抽取的数据放回。即:随机数据可能重复

    • false:伯努利算法,抽取的数据不放回。即:随机数据不重复

  • fraction:

    • withReplacement 为 true:重复数据的几率,范围大于等于 0.表示每一个元素被期望抽取到的次数

    • withReplacement 为 false:抽取的几率,范围在[0,1]之间,0:全不取;1:全取;

  • seed:随机数种子,默认为随机数。当调试程序时,才设置固定值

例子

val sparConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparConf)

val rdd:RDD[Int] = sc.makeRDD(List(1,2,3,4,5))

val resRDD: RDD[Int] = rdd.sample(false,0.4)

resRDD.foreach(println)
sc.stop()

执行结果:

4
2
5

每次执行,抽取的数据不一样


原文出处:/show_1IX1KSGY9Vgh.html