我有两个rdd,想要合并在一起,我有以下问题,
我尝试使用union进行以下操作,但是union根本没有排序,但我不知道如何在这里使用sortby?
List<Integer> data1 = Arrays.asList(1, 3, 5);
List<Integer> data2 = Arrays.asList(2, 4, 6, 8);
JavaRDD<Integer> rdd1 = sc.parallelize(data1);
JavaRDD<Integer> rdd2 = sc.parallelize(data2);
JavaRDD<Integer> rdd = rdd1.union(rdd2);
rdd.sortBy(w->w._1, false); //compile error
另一个问题,是否有任何好方法可以返回合并列表的排序?
答案 0 :(得分:1)
尝试以下:
List<Integer> data1 = Arrays.asList(1, 3, 5);
List<Integer> data2 = Arrays.asList(2, 4, 6, 8);
JavaRDD<Integer> rdd1 = sc.parallelize(data1);
JavaRDD<Integer> rdd2 = sc.parallelize(data2);
JavaRDD<Integer> rdd = rdd1.union(rdd2);
int noofpartitions = 1;
JavaRDD<Integer> rddSorted = rdd.sortBy(f -> f, true, noofpartitions);
rddSorted.collect().forEach(f -> System.out.println(f));
sortBy取三个参数:1。函数2.布尔值 - true表示升序,假降序,3。分区数 它会打印出来:
1
2
3
4
5
6
8
你使用的方式是正确的。有关详细信息How to merge two presorted rdds in spark?
,请参阅此处