我试图在Spark Graph中使用in-degrees对顶点列表进行排序(使用Scala)
// Sort Ascending - both the 2 below yeild same results
gGraph.inDegrees.collect.sortBy(_._2).take(10)
gGraph.inDegrees.collect.sortWith(_._2 < _._2).take(10)
// Sort Decending
gGraph.inDegrees.collect.sortWith(_._2 > _._2).take(10)
gGraph.inDegrees.collect.sortBy(_._2, ascending=false).take(10) //Doesnt Work!!
我希望sortBy(_._2, ascending=false)
的结果与上面提到的sortWith(_._2>_._2)
相同。但得到以下错误。欣赏有关此问题的任何想法。谢谢!
阶&GT; gGraph.inDegrees.collect.sortBy(_。 2,ascending = false).take(10) :55:错误:方法sortBy的参数太多:(f: ((org.apache.spark.graphx.VertexId,Int))=&gt; B)(隐含的ord: scala.math.Ordering [B])Array [(org.apache.spark.graphx.VertexId,Int)] gGraph.inDegrees.collect.sortBy( ._ 2,ascending = false).take(10)
答案 0 :(得分:1)
由于您先行.collect
,因此您在.sortBy
上呼叫Array
,而不是RDD
。 Array
的{{1}}方法只需要一个参数(您无法指定sortBy
)。
通常应该让spark处理尽可能多的计算,并且最后只有ascending
(或collect
)。试试这个:
take