spark3.0教程:RDD转换算子takeSample() 作者:马育民 • 2025-12-08 20:43 • 阅读:10002 # 说明 类似 `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 ``` 原文出处:http://www.malaoshi.top/show_1GW2N2gS0ksU.html