函数签名:
def sample(withReplacement: Boolean,fraction: Double,seed: Long = Utils.random.nextLong): RDD[T]
函数说明:
根据指定的规则从数据集中抽取数据,应用于发现倾斜数据解决数据倾斜
、预估内存
;根据第一个参数可划分为抽取数据不放回
和抽取数据放回
2种规则
伯努利算法:又叫0、1分布。例如扔硬币,要么正面,要么反面。
具体实现:根据种子和随机算法算出一个数和第二个参数设置几率比较,小于第二个参数要,大于不要
第一个参数:抽取的数据是否放回,false:不放回
第二个参数:每条数据抽取的几率,范围在[0,1]之间,0:全不取;1:全取;
第三个参数:随机数种子(随机数不随机:随机算法)
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("CZ")
val sc = new SparkContext(sparkConf)
val dataRDD = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 1)
val newRDD = dataRDD.sample(false, 0.1,1)
newRDD.collect().foreach(println)
sc.stop()
}
运行第一次:
运行第二次:
注:
随机数是通过复杂的数学算法得到的,随机种子(Random Seed)就是这些随机数的初始值。一般计算机里面产生的随机数都是伪随机数。 伪随机数,也是就一个一直不变的数。
第一个参数:抽取的数据是否放回,true:放回;
第二个参数:重复数据的几率,范围大于等于0.表示每一个元素被期望抽取到的次数
第三个参数:随机数种子