在Apache Spark中有一个RDD.top()
API,可以从RDD 返回前k个元素.我想知道这些操作是如何实现的.首先对RDD进行排序然后返回前k个值吗?或者它是否使用其他更有效的实现?
不,它不会对整个RDD进行排序,操作会太昂贵.
它宁愿使用优先级队列分别为每个分区选择TOP N个元素.然后在reduce操作中将这些队列合并在一起.这意味着只有整个RDD的一小部分在整个网络中进行混洗.
有关RDD.scala
详细信息,请参阅
示例:
3个输入分区
RDD.top(2)
[3, 5, 7, 10], [8, 6, 4, 12], [9, 1, 2, 11]
|| || ||
[10, 7] [12, 8] [11, 9]
================== reduce ==================
[12, 11]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
517 次 |
最近记录: |