【发布时间】:2017-10-13 00:47:19
【问题描述】:
我在任何地方都找不到如何在内部对 RDD 执行重新分区?我知道您可以在 RDD 上调用 repartition 方法来增加分区的数量,但它是如何在内部执行的?
假设,最初有 5 个分区,他们有 -
- 第一个分区 - 100 个元素
- 第二个分区 - 200 个元素
- 第三个分区 - 500 个元素
- 第 4 个分区 - 5000 个元素
- 第 5 分区 - 200 个元素
一些分区是倾斜的,因为它们是从 HBase 加载的,并且数据在 HBase 中没有正确加盐,这导致一些区域服务器的条目过多。
在这种情况下,当我们重新分区到 10 时,它会先加载所有分区,然后再进行 shuffle 以创建 10 分区吗?如果无法将完整数据加载到内存中,即所有分区无法一次加载到内存中怎么办?如果 Spark 没有将所有分区加载到内存中,那么它如何知道计数以及如何确保将数据正确分区为 10 个分区。
【问题讨论】:
-
@Krishna Kumar,给出的答案不是很清楚,也没有直接解决问题。你能找到正确的答案吗?
-
@y2k-shubham 我的理解是 Spark 会尝试将所有内容加载到内存中,如果不能,则会抛出与内存相关的异常
标签: performance apache-spark shuffle