【大数据】Spark算子之SortByKey

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·

- 如果喜欢,快分享给你的朋友们吧 -

我们一起愉快的玩耍吧

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180730G1TR3C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券