1、Transformations 转换算子
特点:懒执行,需要action算子粗发执行
- flatMap
- map
- mapToPair
- reduceByKey
- sortBy/sortByKey
- filter
- sample(true,0.1) //抽样 true 表示抽取是放回的 0.1随机抽取的概率 所以 最后的数字是不一定就是10%
- sample(true,0.1,100) 这样就会随机抽样 但是 每次抽出来都是一样的
2、Actions 行动算子 触发Transformation类算子执行,代码中有一个Action的算子,当前这个application中就有一个job
- foreach
- count 将数据拉回到 drive端
- collect 将数据拉回到drive端
- first 获取第一条数据 first = take(1)
- take(3) 获取3条数据 将数据拉取到drive端
3、持久化算子
1. List item
cache() = persist() = persist(StorageLevel.MEMORY_ONLY)
2.persist() 可以手动指定RDD的持久化级别
MEMORY_ONLY 只存放在内存
MEMORY_ONLY_SER 存放内存 并序列化
MEMORY_AND_DISK 优先选择内存存储 内存不足 再放置磁盘
MEMORY_AND_DISK_SER 存放内存 内存不足放磁盘 序列化
避免使用 DISK_ONLY和“_2” 级别 _2 表示 副本数是2
也可以自己设定
总结:
1、cache 和 persist 都是懒执行算子,持久化的最小单位是partition
2、对RDD使用cache或者persist之后 可以赋值给一个变量,下次直接使用这个变量就是使用的持久化的数据
3、如果将持久化的数据赋值给一个变量 ,对RDD使用cache 或者persist算子之后不能紧跟action算子
3.checkpoint()
应用场景
1.对RDD数据持久化,这种情况尽量少用,当lineage比较长,计算复杂时使用,对少数的RDD使用checkpoint
2.checkpoint 在一些特殊的场景下使用 ,SparkStreaming ,可以保存原数据