说明
类似 sample() 算子,根据指定的规则从数据集中抽取数据
应用场景
经过 filter、groupBy 算子运算后,数据可能会出现倾斜(即:某个分区的数据量特别大),通过sample算子采样出一份样本来
声明
def takeSample(
withReplacement: Boolean, // 是否有放回抽样(true=有放回,false=无放回)
num: Int, // 要抽取的样本数量(必须 ≥0)
seed: Long = Utils.random.nextLong // 随机种子(可选,指定后抽样结果可复现)
): Array[ T ]
参数:
withReplacement:
true:为泊松算法,抽取的数据放回。即:随机数据可能重复
false:伯努利算法,抽取的数据不放回。即:随机数据不重复
num:样本数量 实际返回数量可能略少于 num(数据集不足时返回全部)
seed:随机数种子,默认为随机数。当调试程序时,才设置固定值
返回:返回本地数组(Driver 端)
例子
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