如何在spark Scala中按值排序



我有一个键,值对,我需要按值降序返回前10个元素。正如您可以从下面的实际输出中看到的那样,它通过键而不是值(在本例中是通过ascii字符代码)为我提供了最高值。

例如:

//Input:
(the, 5),
(is, 10),
(me, 1)
//Expected Output:
(is, 10),
(the, 5),
(me, 1)
//Actual Output:
(the, 5),
(me, 1),
(is, 10)

我的函数:


def getActiveTaxis(taxiLines: RDD[Array[String]]): Array[(String, Int)] = {
// Removing set up code for brevity
val counts = keys.map(x => (x, 1))
val sortedResult = counts.reduceByKey((a, b) => a + b).sortBy(_._2, false)
sortedResult.top(10)
}

你应该使用take()函数而不是top()。

根据指定的implicit Ordering[T]

对RDD进行排序后,take()将返回top N个元素,而top()将返回top N个元素。

您可以在这里参考top()的实现。

最新更新