def takeSample(
withReplacement: Boolean,
num: Int,
seed: Long = Utils.random.nextLong): Array[T] = withScope {
说明:
withReplacement 是采样是否放回,true就是返回,false就是不放回.如果放回的话,那么下次采样会被抽到.
num : 参数2是因子的意思.如果是采样放回的话(参数1是true),这个参数表示每个元素期望放回的次数.假如说有8个元素,你从这些元素里面采样完了再放回去,你抽完了之后,你希望这个被抽出来的元素能被抽出几次,如果是2次的话,就是这个元素最多能被抽出两次.但是几率不确定
如果参数1是false的话,这个参数表示每个元素被抽取的概率是多少,取值是0~1之间,如果是0的话,那么每个元素都不会被抽到,如果是1的话,每个元素都会被抽出来.
seed:用于指定随机数生成器种子。 一般用默认的, 或者传入当前的时间戳
作用:
采样
image.png

案例

采样放回

  1. import org.apache.spark.rdd.RDD
  2. import org.apache.spark.{SparkConf, SparkContext}
  3. object demo {
  4. def main(args: Array[String]): Unit = {
  5. //创建SparkConf并设置App名称
  6. val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")
  7. //创建SparkContext,该对象是提交Spark App的入口
  8. val sc: SparkContext = new SparkContext(conf)
  9. val rdd: RDD[Int] = sc.makeRDD(1 to 10)
  10. //从rdd中随机抽取一些数据(抽样放回)
  11. val newRDD: RDD[Int] = rdd.sample(true, 1)
  12. println(newRDD.collect().mkString(",")) //输出: 1,1,5,5,6,6,7,7,7,7,8,8,10
  13. // 关闭连接
  14. sc.stop()
  15. }
  16. }

采样不放回

  1. import org.apache.spark.rdd.RDD
  2. import org.apache.spark.{SparkConf, SparkContext}
  3. object demo {
  4. def main(args: Array[String]): Unit = {
  5. //创建SparkConf并设置App名称
  6. val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")
  7. //创建SparkContext,该对象是提交Spark App的入口
  8. val sc: SparkContext = new SparkContext(conf)
  9. val rdd: RDD[Int] = sc.makeRDD(1 to 10)
  10. //从rdd中随机抽取一些数据(抽样不放回)
  11. val newRDD: RDD[Int] = rdd.sample(false, 0.6)
  12. println(newRDD.collect().mkString(",")) //输出: 2,3,4,5,6,7,8,10
  13. // 关闭连接
  14. sc.stop()
  15. }
  16. }