如何在Spark Scala中使用5个元素对元组的RDD进行排序?

时间:2015-10-13 07:14:37

标签: scala sorting apache-spark rdd

如果我有一个带有5个元素的元组的RDD,例如, RDD(Double,String,Int,Double,Double)

如何使用第五个元素有效地对RDD进行排序?

我尝试将此RDD映射到键值对并使用sortByKey,但看起来sortByKey非常慢,它比我收集此RDD并在收集的数组上使用sortWith慢。为什么会这样?

非常感谢。

3 个答案:

答案 0 :(得分:9)

您可以sortBy直接在RDD

上执行此操作
myRdd.sortBy(_._5) // Sort by 5th field of each 5-tuple

还有额外的可选参数来定义排序顺序("升序")和分区数。

答案 1 :(得分:3)

如果您想按降序排序&如果相应的元素是int类型,你可以使用" - "签名以降序对RDD进行排序。

例如:

我是(String,Int)的元组的RDD。要按降序排列第二个元素对此RDD进行排序,

rdd.sortBy(x => -x._2).collect().foreach(println);

我有一个元组的RDD(String,String)。要按降序排列第二个元素对此RDD进行排序,

rdd.sortBy(x => x._2, false).collect().foreach(println);

答案 2 :(得分:1)

Microsoft.Office.Interop.PowerPoint.Application PowerPoint_App = new Microsoft.Office.Interop.PowerPoint.Application(); Microsoft.Office.Interop.PowerPoint.Presentations multi_presentations = PowerPoint_App.Presentations; Microsoft.Office.Interop.PowerPoint.Presentation presentation = multi_presentations.Open(filePath, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse); 是Spark 1.0唯一的分布式排序API

您要对多少数据进行排序?少量将导致更快的本地/集中排序。如果您尝试对可能甚至不适合单个节点的GB和GB数据进行排序,那么Spark就会闪耀。