No.1 简单排序
在Spark中,进行简单排序一般使用SortByKey算子,比如:
RangePartitioner是如何进行数据分片的?
RangePartitioner主要是将依赖的父RDD的数据划分成不同的范围,而且这些不同的范围是有序,范围的数据的无序的。
RangePartitioner:
除了结果有序的基石外,最为重要的是保证每个分区(partitioner)的数据量是均匀的。
RangePartitioner采用了水塘抽样算法对依赖的父RDD的数据进行有序范围的划分,从而减少了对RDD进行扫描,从而减少一次job。
HashPartitioner:
最大的弊端就是数据倾斜(导致每个分区的数据不均匀,导致有些分区数据特别少,有些分区特别多。)
No.2 二次排序算法
所谓二次排序是指排序的时候考虑两个维度(两个字段排序)。
2.1 编程步骤
1、按照Ordered 和Serializable接口,实现二次排序的自定义Key
2、将要进行二次排序的文件加载,生成Key-value类型的RDD
3、使用sortByKey基于自定义的Key进行二次排序
4、取出掉自定义的Key,只保留排序的结果
2.2 编程代码
准备测试数据
java实现:
主程序入口
Scala实现:
入口程序:
·end·
- 如果喜欢,快分享给你的朋友们吧 -
我们一起愉快的玩耍吧
领取专属 10元无门槛券
私享最新 技术干货