Spark学习 day5
Rdd算子:
转换算子
// 1. map: 每个数+1
[1,2,3] → [2,3,4]
// 2. flatMap: 句子拆单词
["a b","c"] → ["a","b","c"]
// 3. reduceByKey: 相同key求和
[(a,1),(a,2),(b,3)] → [(a,3),(b,3)]
// 4. mapValues: 只改value
[(a,1),(b,2)] → [(a,10),(b,20)] // 每个值×10
// 5. groupBy: 按奇偶分组
[1,2,3,4] → [(奇数,[1,3]), (偶数,[2,4])]
// 6. filter: 过滤偶数
[1,2,3,4] → [1,3]
// 7. distinct: 去重
[1,2,2,3] → [1,2,3]
// 8. union: 合并
[1,2] + [3,4] → [1,2,3,4]
// 9. join: 连接
[(a,1),(b,2)] join [(a,甲)] → [(a,(1,甲))]
// 10. intersection: 交集
[1,2,3] ∩ [2,3,4] → [2,3]
// 11. glom: 看分区情况
分区1:[1,2] 分区2:[3,4] → [[1,2],[3,4]]
// 12. groupByKey: 按键分组(别用!慢!)
[(a,1),(a,2),(b,3)] → [(a,[1,2]), (b,[3])]
// 13. sortBy: 排序
[3,1,4] → [1,3,4]
// 14. sortByKey: 按键排序
[(z,1),(a,2)] → [(a,2),(z,1)]
// 15-16. 案例用算子(通常combineByKey等)
// 17. partitionBy: 重分区
// 18. repartition: 调分区数
rdd.repartition(4) // 变成4个分区
行动算子
// 19-20. 案例用算子
// 21. count: 数个数
[1,2,3] → 3
// 22. reduce: 累加
[1,2,3] → 6 // 1+2+3
// 23. fold: 带初始值的累加
初始值10 + [1,2,3] → 16 // 10+1+2+3
// 24. take: 取前N个
[5,3,8,1] → take(2) → [5,3]
// 25. takeSample: 随机抽
[1,2,3,4,5] → 随机抽2个 → [2,5]
// 26. takeOrdered: 排序后取前N个
[5,1,4] → 排序[1,4,5] → 取前2 → [1,4]
// 27. foreach: 遍历打印(无返回值)
rdd.foreach(println) // 纯副作用
// 28. saveAsTextFile: 存文件
rdd.saveAsTextFile("hdfs://...") // 存到HDFS
// 29. mapPartitions: 整个分区一起处理
// 30. foreachPartition: 按分区遍历
持久化相关的
// RDD缓存:
rdd.cache() // 放内存
rdd.persist() // 放内存(默认)
rdd.unpersist() // 清缓存
// Checkpoint: 存到硬盘(安全)
sc.setCheckpointDir("hdfs://...")
rdd.checkpoint()
浙公网安备 33010602011771号