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()
posted @ 2026-02-04 21:39  呓语-MSHK  阅读(3)  评论(0)    收藏  举报