Value类型函数
1. distinct :去除RDD中重复数据 ,有默认排序和指定分区数两种调用形式。
2. coalesce :根据数据量缩减分区,减少小任务调度成本,提升执行效率,可指定分区数等参数 。
3. repartition :能实现分区数多与少的RDD相互转换,本质是 coalesce 操作,默认 shuffle 为 true 。
4. sortBy :按指定函数处理数据后排序,默认升序,排序后新RDD分区数与原RDD一致 。
代码
结果
双Value类型函数
1. intersection :对两个RDD求交集,返回新RDD 。
2. union :对两个RDD求并集,重复数据不会去重 。
3. subtract :以源RDD元素为主,去除两个RDD中重复元素 。
- zip :将两个RDD元素按位置组合成键值对形式 。
- 代码
结果
RDD转换算子
RDD 根据数据处理方式的不同将算子整体上分为 Value 类型、双 Value 类型和 Key-Value 类型。
Value类型
1. map :对数据逐条映射转换,可用于类型或值转换 。
2. mapPartitions :以分区为单位处理数据,相比 map 有性能优势,但可能占用较多内存 。并对比了 map 和 mapPartitions 在数据处理、功能及性能方面的区别 。
3. mapPartitionsWithIndex :以分区为单位处理数据,处理时可获取分区索引 。
4. flatMap :先扁平化数据再映射处理,与 map 的区别在于 flatMap 会将输入对象映射为新集合后连成大集合 。
5. glom :将同分区数据转换为内存数组处理,分区不变 。
6. groupBy :按指定规则分组数据,分区默认不变,但数据会打乱重组(涉及shuffle ) 。7. filter :按指定规则筛选过滤数据,符合规则的数据保留,分区不变但可能出现数据倾斜 。
8. sample :根据指定规则从数据集中抽取数据,介绍了抽样算法(伯努利分布 )、具体实现及参数含义 。
代码
结果
Key-Value类型:
1. partitionBy :按指定分区器对数据重新分区,Spark默认分区器是HashPartitioner 。 2. groupByKey :根据key对value进行分组 ,有默认和指定分区数等调用形式。
3. reduceByKey :对相同Key的Value进行聚合 ,相比 groupByKey ,在shuffle前可预聚合,性能更优。
reduceByKey 和 groupByKey 的区别:
从 shuffle 的角度:reduceByKey 和 groupByKey 都存在 shuffle 的操作,但是 reduceByKey可以在 shuffle 前对分区内相同 key 的数据进行预聚合(combine)功能,这样会减少落盘的数据量,而 groupByKey 只是进行分组,不存在数据量减少的问题,reduceByKey 性能比较高。
从功能的角度:reduceByKey 其实包含分组和聚合的功能。GroupByKey 只能分组,不能聚
合,所以在分组聚合的场合下,推荐使用 reduceByKey,如果仅仅是分组而不需要聚合。那
么还是只能使用 groupByKey
- aggregateByKey :可按不同规则进行分区内和分区间计算 。
➢ 函数说明
6.foldByKey :当分区内和分区间计算规则相同时, aggregateByKey 可简化为此算子 。
7. combineByKey :功能类似 aggregateByKey ,可让计算时数据结构按需转换。还对比了 reduceByKey 、 foldByKey 、 aggregateByKey 、 combineByKey 在计算规则等方面的区别。
reduceByKey、foldByKey、aggregateByKey、combineByKey 的区别:
reduceByKey: 相同 key 的第一个数据不进行任何计算,分区内和分区间计算规则相同
FoldByKey: 每一个key 对应的数据和初始值进行分区内计算,分区内和分区间计算规则相
同
AggregateByKey:每一个 key 对应的数据和初始值进行分区内计算,分区内和分区间计算规则可以不相同
CombineByKey:当计算时,发现数据结构不满足要求时,可以让第一个数据转换结构。分区
内和分区间计算规则不相同。
- sortByKey :在(K, V)型RDD上,按Key排序,K需实现Ordered接口 。
- join :在(K, V)和(K, W)型RDD上,返回相同Key对应的元素连接后的新RDD 。
- leftOuterJoin :类似SQL左外连接 。
- cogroup :在(K, V)和(K, W)型RDD上调用,返回特定类型的RDD 。
代码
结果
代码加结果