【问题标题】:spark RDD sort by two valuesspark RDD 按两个值排序
【发布时间】:2016-08-26 02:08:55
【问题描述】:

我有一个RDD(name:String, popularity:Int, rank:Int)。我想按rank 对它进行排序,如果rank 匹配则按popularity。我通过两个转换来做到这一点。

var result = myRDD
        .sortBy(_._2, ascending = false)
        .sortBy(_._3, ascending = false)
        .take(10)

我可以一次转换吗?

【问题讨论】:

  • 你不能将 RDD 转换为数据框并像这样排序 df.orderBy(desc("foo"), "bar")
  • @RamPrasadG 感谢您的建议。但我需要 RDD 处理。

标签: scala sorting apache-spark rdd


【解决方案1】:

您可以尝试创建一个键值的RDD,其中键为Tuple,由rankpopularity 组成,值为name,并按键排序。

例如:

// _._1 - 名称

// _._2 - 流行度

// _._3 - 排名

var tupledRDD = myRDD.map(line => ((line._3, line._2), line._1))
.sortBy(_._1, ascending=false)
.take(10)

【讨论】:

  • 正确,或者只是myRDD.sortBy(line => (line._3, line._2), ascending=false)
  • 谢谢。它正在工作。我需要知道sortBy() 是如何工作的。如果我想使用不同的 ASC 和 DESC 组合怎么办。
  • 误点击。感谢您的通知。 @AvihooMamka
猜你喜欢
  • 2020-06-28
  • 1970-01-01
  • 2015-06-15
  • 2016-05-07
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多