jUs*_*Usr 6 hadoop apache-spark
我使用 Spark 并且发现当查询有很多连接操作并且 group by Spark 需要执行大量洗牌操作时。我一直在寻找为什么会发生这种情况的信息,但我没有找到具体的信息。你能帮助理解这一点吗?
小智 5
Spark shuffle 只是在集群中移动数据。因此,任何需要分区本地不存在的数据的转换都会执行洗牌。查看 join,每个分区都需要遍历整个连接的 df 才能完成操作,因此会进行洗牌,基本上将连接的 df 移动到每个活动分区。同样的情况也会发生在按键分组时,所有相同的键都需要位于同一个分区中,以便随机播放将它们移动到那里。正如您所看到的,这在性能方面并不是很好,因此您应该尽可能避免它。
用更简单的话来说:
数据分散。
有时,数据必须四处移动。
join) 组合两个 RDD 时,或者当您想要将某个键的所有值收集在一起并对它们执行操作 ( groupByKey) 时,就会出现这种情况。需要传输的数据量可能并不总是很多。针对您的具体情况:
对于连接,如果 RDD 是共同分区的,或者如果我们确保具有相同键的行坐在一起,则在连接期间不会有任何洗牌!
groupByKey您可以通过转移到 来减少操作中混洗的数据量reduceByKey。然而,这并不是灵丹妙药,在某些情况下您可能想继续使用groupByKey。
| 归档时间: |
|
| 查看次数: |
5132 次 |
| 最近记录: |