如何在没有排序的情况下获得spark中的top-k频繁单词?

时间:2015-03-27 21:45:06

标签: scala apache-spark

在spark中,我们可以轻松使用map reduce来计算单词出现时间,并使用sort来获得前k个频繁的单词,

// Sort locally inside node, keep only top-k results,
// no network communication

val partialTopK = wordCount.mapPartitions(it => {
    val a = it.toArray
    a.sortBy(-_._2).take(10).iterator
}, true)


// Collect local top-k results, faster than the naive solution

val collectedTopK = partialTopK.collect
collectedTopK.size


// Compute global top-k at master,
// no communication, everything done on the master node

val topK = collectedTopK.sortBy(-_._2).take(10)

但我想知道是否有更好的解决方案可以避免排序?

1 个答案:

答案 0 :(得分:5)

我想你想要takeOrdered

  

返回此RDD中的第一个k(最小)元素   指定的隐式排序[T]并维护排序。

top

  

返回此RDD中的前k个(最大)元素   指定隐式排序[T]。

还有其他一些SO问题/答案似乎至少部分重复