我有一个巨大的RDD,我想在本地对各个分区进行排序。我查看了sortByKey操作,但不清楚它是否会调用shuffle。 (我想避免洗牌)
在Cloudera blog中提到sortByKey将涉及shuffle,但是从sortByKey的javadoc开始,看起来没有shuffle直到调用collect()。
问题:sortByKey()是否涉及数据的混乱?如果是,那么在每个RDD分区中对数据进行排序的最佳方法是什么?如果不是,那么collect()如何使全局排序?
答案 0 :(得分:0)
它涉及一个随机播放,但当然只有在您的执行图表中涉及一个动作(如收集或接受)时才会发生这种情况。这是因为当必须从其他转换中消除排序结果时,必须将具有相同键的记录定向到群集上的同一个使用者。
答案 1 :(得分:0)
基本上sortByKey()是一种宽类型转换。由于所有转换操作本质上都是惰性的,因此只有当你触发一个动作时才会发生改组(在你的情况下是collect())。通常,转换就像操作的指令一样。 Action将使用此说明执行。你也可以参考DAG获得更清晰的图片。