整理心情继续。
Value类型再开始:
8.sample
seed默认是系统时间(老倒霉蛋小声是不是抽奖也是看时间的)
抽取数据不放回:伯努利
抽取数据放回:泊松
摘抄自尚硅谷讲义
// 抽取数据不放回(伯努利算法)
// 伯努利算法:又叫 0、1 分布。例如扔硬币,要么正面,要么反面。
// 具体实现:根据种子和随机算法算出一个数和第二个参数设置几率比较,小于第二个参数要,大于不
要
// 第一个参数:抽取的数据是否放回,false:不放回
// 第二个参数:抽取的几率,范围在[0,1]之间,0:全不取;1:全取;
// 第三个参数:随机数种子// 抽取数据放回(泊松算法)
// 第一个参数:抽取的数据是否放回,true:放回;false:不放回
// 第二个参数:重复数据的几率,范围大于等于 0.表示每一个元素被期望抽取到的次数
// 第三个参数:随机数种子
sample能用来解决数据倾斜问题。数据倾斜问题源自shuffle操作。经由分组之后,重新组合,导致不均衡,一些task要处理的太多,导致内存溢出的情况。相同的key在一个分区,多次抽取有大量a这个key时,对a这个key进行操作。
9. distinct:用来去重
java底层是用hashset
rdd的实现通过map reducebykey。分布式实现去重。
10.coalesce:默认情况下不会将分区数据打乱重新组合,会出现数据不均衡出现数据倾斜。可以进行shuffle处理。
val newrdd = rdd.coalesce(2,true)
根据数据量缩减分区,用于大数据集过滤后,提高小数据集的执行效率
当 spark 程序中,存在过多的小任务的时候,可以通过 coalesce 方法,收缩合并分区,减少分区的个数,减小任务调度成本,也可以通过这个算子扩大分区,不过需要shuffle。因为默认不shuffle没有意义不起作用。spark有提供简化操作。
val newrdd = rdd.repartition(3)
底层是调用coalesce,shuffle设置为true
11.repartition
12. sortBy
排序分区存在shuffle。可以根据指定规则对数据源中数据进行排序,默认为升序。有第二个参数false设置为降序。
Value类型结束啦。开启双Value新篇章