簡體   English   中英

使用值使用 groupbykey 后對 rdd 進行排序

[英]Sorting an rdd after using groupbykey using values

我有JavaPairRDD作為

JavaPairRDD<String, Iterable<Row>> rdd = mydataset.orderBy("orderfield1", "orderfield2").javaRDD().mapToPair(row -> new Tuple2<>(row.getAs("id").toString(), row)).groupByKey()

由於groupbykey()不維護訂單, orderby在這里不起作用。 我想使用數據集中的一些字段對Iterable<Row>進行排序。

您可以將Iterable轉換為List ,然后像下面那樣對該列表進行排序。 我假設您的排序字段稱為x並且它是 String 類型,但您顯然可以根據您的具體情況進行調整。

String sortingField = "x"
JavaPairRDD<String, List<Row>> rdd = mydataset
    .javaRDD()
    .mapToPair(row -> new Tuple2<>(row.getAs("id").toString(), row))
    .groupByKey()
    .mapValues(it -> {
        List<Row> rows = new ArrayList<>();
        it.forEach(rows::add);
        rows.sort(
            (Row a, Row b) -> a.<String>getAs(sortingField).compareTo(b.<String>getAs(sortingField))
        );
        return rows;
    });

請注意,在 scala 中這樣寫起來要簡單得多:

val rdd = mydataset
    .rdd
    .map(row => (row.getAs("id").toString, row))
    .groupByKey
    .mapValues( _.toSeq.sortBy(_.getAs[String]("x")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM