最近在项目中遇到二次排序的需求,和平常开发spark的application一样,开始查看API,编码,调试,验证结果。由于之前对spark的API使用过,知道API中的sortByKey()可以自定义排序规则,通过实现自定义的排序规则来实现二次排序。
这里为了说明问题,举了一个简单的例子,key是由两部分组成的,我们这里按key的第一部分的降序排,key的第二部分升序排,具体如下:
JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
List data = Arrays.asList(5, 1, 1, 4, 4, 2, 2);
JavaRDD javaRDD = javaSparkContext.parallelize(data);
final Random random = new Random(100);
JavaPairRDD javaPairRDD = javaRDD.mapToPair(new PairFunction() {
@Override
public Tuple2 call(Integer integer) throws Exception {
return new Tuple2(Integer.toString(integer) + " " + random.nextInt(10),random.nextInt(10));
}
});
JavaPairRDD sortByKeyRDD = javaPairRDD.sortByKey(new Comparator() {