gpt4 book ai didi

performance - Spark 内部结构 - 重新分区是否将所有分区加载到内存中?

转载 作者:行者123 更新时间:2023-12-05 05:20:56 25 4
gpt4 key购买 nike

我在任何地方都找不到如何在内部对 RDD 执行重新分区?我知道您可以在 RDD 上调用 repartition 方法来增加分区数量,但它是如何在内部执行的?

假设,最初有 5 个分区,它们有 -

  • 第一个分区 - 100 个元素
  • 第二个分区 - 200 个元素
  • 第三个分区 - 500 个元素
  • 第 4 个分区 - 5000 个元素
  • 第 5 个分区 - 200 个元素

一些分区是倾斜的,因为它们是从 HBase 加载的,并且数据在 HBase 中没有正确加盐,这导致一些区域服务器有太多条目。

在这种情况下,当我们重新分区到 10 时,它会先加载所有分区,然后进行混洗以创建 10 分区吗?如果无法将完整数据加载到内存中,即无法将所有分区一次加载到内存中怎么办?如果 Spark 没有将所有分区加载到内存中,那么它如何知道计数以及如何确保将数据正确地划分为 10 个分区。

最佳答案

据我了解,repartition肯定会触发shuffle。来自 Job Logical Plan以下文档可以说是关于repartition

   - for each partition, every record is assigned a key which is an increasing number.
- hash(key) leads to a uniform records distribution on all different partitions.

如果 Spark 无法将所有数据加载到 memory 中,则会抛出 memory issue。因此,Spark 的默认处理全部在内存 中完成,即应该始终有足够的内存来存储您的数据
Persist 选项可用于告诉 spark 如果内存不足,spill 您的数据到 disk 中。< br/> Jacek Laskowski还解释了重新分区。
Understanding your Apache Spark Application Through Visualization应该足以让您自己测试和了解。

关于performance - Spark 内部结构 - 重新分区是否将所有分区加载到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43959065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com