转换算子
 
value类型
 
| 算子名称 | 作用 | 
|---|
| Map映射 | a->b | 
| flatMap扁平化 | [[a,b],[c,d]] -> [a,b,c,d] ,二维变一维 | 
| groupBy分组 | [1,2,3,4] ->[[1,3],[2,4] ],一维变二维 | 
| filter过滤 | [1,2,3,4] -> [2,4] 符合条件进入,不符合去掉 | 
| distinct去重 | [1,1,2,2] -> [1,2] 去重过程中存在shuffle | 
| sortBy排序 | [1,3,2] -> [1,2,3] 排序 | 
 
使用localhost:4040可以查看IDEA代码中算子的执行情况,可以使用Thread.sleep(10000)来睡眠一会,保证可以打开该网页。
 
key-value类型
 
| 算子名称 | 作用 | 
|---|
| mapValues | 对value进行映射 | 
| groupByKey | 对数据进行汇总,可以设置分区数量或分区器 | 
| reduceByKey | 对数据进行汇总计算,底层会打散重分区,增加了预聚合 | 
| sortByKey | 对Key进行排序,底层是Range分区 | 
| reduceByKey不能用于减法和除法运算,只能用于加法和乘法计算。 |  | 
 
两种分区
 
- Hash分区:极端情况有可能导致数据倾斜,适合用于聚合。
- Range分区:尽量保证每个分区中数据量均匀,适合用于排序。使用Range分区器的算子有groupByKey, sortBy, cogroup.