在星星之火中,我们可以很容易地使用map约简来计算单词的出现时间,并使用排序来获得最频繁的单词,
// 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)但我想知道是否有一个更好的解决方案,完全避免排序?
发布于 2015-03-27 22:02:38
我想你想要takeOrdered
返回由指定的隐式OrderingT定义的该RDD中的第一个k(最小)元素,并保持排序。
或top
返回由指定的隐式OrderingT定义的这个RDD的顶部k(最大)元素。
还有几个这样的问题/答案似乎至少也有部分重复。
https://stackoverflow.com/questions/29310687
复制相似问题