转换算子Sample介绍及底层相关算法代码
Posted Mr.zhou_Zxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转换算子Sample介绍及底层相关算法代码相关的知识,希望对你有一定的参考价值。
转换算子Sample介绍及底层相关算法代码
- Spark-Core
object num5{
def main(args: Array[String]): Unit = {
val sc = new SparkContext(new SparkConf().setMaster("local[*]").setAppName("num5"))
val RDD: RDD[Int] = sc.makeRDD(List(1,2,3,4,5,6,7,8,9,10))
/**
* 抽取算法不放回(伯努利算法)
* 伯努利算法:又叫0,1分布,例如仍硬币,要么正面,要么反面
* 具体实现:根据种子和随机算法算出一个数和第二个参数设置几率比较,
* 小于第二个参数,大于不要
* 第一个参数:抽取的数据是否放回,false:不放回
* 第二个参数:抽取的纪律,范围在[0,1]之间,0:全不取;1,全取
* 第三个参数:随机数种子
*/
val dateRDD1: RDD[Int] = RDD.sample(false,0.5)
dateRDD1.foreach(println)
/**
* 抽取数据放回(泊松算法)
* 第一个参数:抽取的数据是否放回,true:放回
* 第二个参数:重复数据的几率,范围大于等于0,表示没有一个元素被期望抽取到的次数
* 第三个参数:随机数种子
*/
val dateRDD2: RDD[Int] = RDD.sample(true,2)
dateRDD2.foreach(println)
}
}
- Sample底层代码
if (withReplacement) {
//第一个参数为true,泊松算法
new PartitionwiseSampledRDD[T, T](this, new PoissonSampler[T](fraction), true, seed)
} else {
//第一个参数为false,伯努利算法
new PartitionwiseSampledRDD[T, T](this, new BernoulliSampler[T](fraction), true, seed)
}
以上是关于转换算子Sample介绍及底层相关算法代码的主要内容,如果未能解决你的问题,请参考以下文章