转换算子
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.