spark RDD按两个值排序

时间:2016-05-01 05:16:16

标签: scala sorting apache-spark rdd

我有RDD (name:String, popularity:Int, rank:Int)。我希望按rank对此进行排序,如果rank匹配则popularity。我是通过两次转换这样做的。

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

我可以在一次转型中完成吗?

1 个答案:

答案 0 :(得分:4)

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

例如:

  

// _._ 1 - 名称

     

// _._ 2 - 人气

     

// _._ 3 - 排名

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