微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Spark Scala 中按键排序

如何解决在 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 举报,一经查实,本站将立刻删除。