Apache Spark RDD sortByKey算法和时间复杂度

时间:2015-08-20 16:46:42

标签: apache-spark time-complexity big-o rdd

Apache Spark RDD sortByKey的Big-O时间复杂度是多少?

我正在尝试根据特定订单为RDD分配行号。

假设我有{K,V}对RDD,我希望使用

按键执行订单
myRDD.sortByKey(true).zipWithIndex

此操作的时间复杂度是多少?

幕后发生了什么?泡泡排序?我希望不是!我的数据集非常大并且跨越分区,所以我很好奇sortByKey函数是否是最优的,或者在分区中做某种中间数据结构,然后在分区之间做其他事情来优化消息传递,或者是什么。 / p>

1 个答案:

答案 0 :(得分:2)

快速查看代码显示正在使用RangePartitioner。文档说:

  

按范围将可排序记录按粗略划分    *相等的范围。范围是通过对

中传递的RDD的内容进行抽样来确定的

所以本质上你的数据被采样(O [n]),然后只对排序的唯一样本密钥(m)进行排序(O [m log(m)])和确定的密钥范围,然后是整个数据随机排列(O [n],但代价高昂),然后内部对给定分区上接收的密钥范围进行排序(O [p log [p))。

{{1}}可能使用本地大小来分配号码,使用分区号,因此可能存储分区元数据以实现此效果:

  

将此RDD与其元素索引一起拉出。排序首先基于分区索引      *然后是每个分区内的项目顺序。所以第一项是第一项      * partition获取索引0,最后一个分区中的最后一项获得最大索引。