Spark的算子-详解

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 ,可以保存原数据

checkpint流程

1.当spark job执行完成之后,spark 会从后往前回溯

2.找到checkpoint的RDD,对RDD进行标记,当回溯完成之后,重新启动job,这个job重新计算checkpointRDD的数据

3.计算完成之后将数据直接放入指定的checkpint目录中

优化:对RDD使用checkpoint之前最好先cache()下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值