【发布时间】:2016-09-28 17:55:03
【问题描述】:
我有一个巨大的 RDD,我想在其中对单个分区进行本地排序。我查看了 sortByKey 操作,但不清楚它是否调用了随机播放。 (我想避免洗牌)
在Cloudera blog 中提到 sortByKey 将涉及随机播放,但从 sortByKey 的javadoc 来看,在调用 collect() 之前似乎没有随机播放。
问题:sortByKey() 是否涉及数据洗牌?如果是,那么对每个 RDD 分区中的数据进行排序的最佳方法是什么?如果不是,那么 collect() 如何使所有内容全局排序?
【问题讨论】:
-
Spark 使用惰性求值。转换本身不会调用任何操作,直到 Spark 遇到一些称为 输出转换 的操作,它会具体化图形并导致执行开始。如果你想查看
sortByKey实际在做什么,请查看BlockStoreShuffleReader.read方法 -
@YuvalItzchakov 我会注意到
sortByKey并不是完全懒惰的。它将急切地处理输入 rdd。 -
@zero323 真的吗?我不知道。你能参考代码中处理输入RDD的部分吗?我所看到的只是分配了一个
ShuffleRDD。 -
@YuvalItzchakov 这是罪魁祸首:github.com/apache/spark/blob/…
-
@zero323 谢谢。
标签: apache-spark