【问题标题】:Spark Graphx inDegrees Sorting - sortBy Vs sortWithSpark Graphx inDegrees 排序 - sortBy 与 sortWith
【发布时间】:2017-12-12 08:38:44
【问题描述】:

我正在尝试根据 Spark 图中的入度对顶点列表进行排序(使用 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&gt;_._2) 相同。但得到以下错误。感谢您对此的任何想法。谢谢!

scala> gGraph.inDegrees.collect.sortBy(_.2, ascending=false).take(10) :55: 错误: 方法 sortBy 的参数太多: (f: ((org.apache.spark.graphx.VertexId, Int)) => B)(隐式排序: scala.math.Ordering[B])Array[(org.apache.spark.graphx.VertexId, Int)] gGraph.inDegrees.collect.sortBy(._2, ascending=false).take(10)

【问题讨论】:

    标签: scala apache-spark spark-graphx


    【解决方案1】:

    由于您首先执行.collect,因此您是在Array 上调用.sortBy,而不是在RDD 上。 ArraysortBy方法只接受一个参数(不能指定ascending)。

    您通常应该让 spark 处理尽可能多的计算,最后只处理collect(或take)。试试这个:

    gGraph.inDegrees.sortBy(_._2, ascending=false).take(10)
    

    【讨论】:

    • 是的,它有效。谢谢! scala> gGraph.inDegrees.sortBy(_._2, ascending=false).take(10) res122: Array[(org.apache.spark.graphx.VertexId, Int)] = Array((10397,152), (13930 ,145), (11298,143), (11292,132), (12266,107), (13487,96), (12892,82), (11618,82), (11433,81), (14869,80) ))
    猜你喜欢
    • 2014-06-28
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2017-05-18
    相关资源
    最近更新 更多