spark RDD 按两个值排序

spark RDD sort by two values

我有 RDD(name:String, popularity:Int, rank:Int)。我想按 rank 排序,如果 rank 匹配,则按 popularity 排序。我通过两个转换来这样做。

var result = myRDD
        .sortBy(_._2, ascending = false)
        .sortBy(_._3, ascending = false)
        .take(10)

我可以一次性完成吗?

您可以尝试制作一个 RDD 的键值,其中键 Tuplerankpopularity 组成,值将为 name 和按键排序。

例如:

// _._1 - name

// _._2 - popularity

// _._3 - rank

var tupledRDD = myRDD.map(line => ((line._3, line._2), line._1))
.sortBy(_._1, ascending=false)
.take(10)