如何在Spark中使用Java中的sortby

时间:2017-11-25 02:47:52

标签: apache-spark

我有两个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

另一个问题,是否有任何好方法可以返回合并列表的排序?

1 个答案:

答案 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?

,请参阅此处