在 Spark Scala 中按键排序

问题描述

我正在尝试计算网页的 pageranks。这里的贡献是一个pairRDD,以val pageID 为键,double contrib 作为值。

所以我的代码的最后一行是这样的 -

  ranksRDD = contributions.map{
    case(pageId,contrib) => (pageId.toString.toInt,(0.15/1000) + (0.85 * (contrib) )
  }

这里我得到一个pairRDD,以pageIds为键,以pagerank为符号。现在我想根据key对我的RDD进行排序并显示前10个网页的pageranks(pageids - 0,1,2 ... 9)。

一种方法是分配一个reducer并执行takeOrdered(10)。但我收到一条错误消息 -

没有类型的隐式参数:Ordering[(Any,Double)]

这里的“ANY”是什么?为什么它没有转换为int?我能做些什么来解决它?

我也尝试使用 sortByKey 但我再次收到错误消息 - “无法解析符号” - 我尝试了 import org.apache.spark.SparkContext._ 但它还是不行

另外,有没有更简单或更好的方法来做到这一点?

//graphRDD  - [(1,List(2)),(2,List(3,4)).... ]
//ranksRDD - [(1,0.11),0.11).... ]

    for (i <- 1 to 10) {

      val contributions = graphRDD.join(ranksRDD).flatMap {
        case (pageId,(links,rank)) =>
          links.flatMap(dest => List((dest,rank / links.size),(pageId,0.0)) )
      }.reduceByKey(_+_)

      val mass = contributions.lookup(0)(0)

      ranksRDD = contributions.map{
        case(pageId,contrib) => if (pageId == 0) (pageId.toString.toInt,0.0)
        else (pageId.toString.toInt,(0.15/k2) + (0.85 * (contrib + (mass.todouble/k2)))  )
      }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)