我有RDD
(name:String, popularity:Int, rank:Int)
。我希望按rank
对此进行排序,如果rank
匹配则popularity
。我是通过两次转换这样做的。
var result = myRDD
.sortBy(_._2, ascending = false)
.sortBy(_._3, ascending = false)
.take(10)
我可以在一次转型中完成吗?
答案 0 :(得分:4)
您可以尝试制作一个RDD
键值,其中键Tuple
由rank
和popularity
组成,值为name
并按排序关键。
例如:
// _._ 1 - 名称
// _._ 2 - 人气
// _._ 3 - 排名
var tupledRDD = myRDD.map(line => ((line._3, line._2), line._1))
.sortBy(_._1, ascending=false)
.take(10)