如果我有一个带有5个元素的元组的RDD,例如, RDD(Double,String,Int,Double,Double)
如何使用第五个元素有效地对RDD进行排序?
我尝试将此RDD映射到键值对并使用sortByKey,但看起来sortByKey非常慢,它比我收集此RDD并在收集的数组上使用sortWith慢。为什么会这样?
非常感谢。
答案 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就会闪耀。