Performance Spark内部-重新分区是否加载内存中的所有分区?

Performance Spark内部-重新分区是否加载内存中的所有分区?,performance,apache-spark,shuffle,Performance,Apache Spark,Shuffle,我在任何地方都找不到如何在RDD内部执行重新分区?我知道您可以在RDD上调用重新分区方法来增加分区的数量,但是它是如何在内部执行的呢 假设,最初有5个分区,它们有- 第一分区-100个元素 第二分区-200个元素 第三分区-500个单元 第四分区-5000个元素 第5分区-200个元素 一些分区是倾斜的,因为它们是从HBase加载的,并且数据没有正确地存储在HBase中,这导致一些区域服务器的条目过多 在这种情况下,当我们对10进行重新分区时,它会首先加载所有分区,然后进行洗牌以创建10个分

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

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

  • 第一分区-100个元素
  • 第二分区-200个元素
  • 第三分区-500个单元
  • 第四分区-5000个元素
  • 第5分区-200个元素
一些分区是倾斜的,因为它们是从HBase加载的,并且数据没有正确地存储在HBase中,这导致一些区域服务器的条目过多


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

据我所知,
重新划分
肯定会触发
洗牌
。从文档中可以看出,以下内容是关于重新分区的

   - 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
无法将所有数据加载到
内存中
,则将抛出
内存问题
。因此,
Spark
的默认处理都是在
内存中完成的,也就是说,应该总是有足够的内存存储数据
Persist
选项可用于告诉
spark
磁盘
内存不足时溢出
数据。
还解释了有关重新分区的信息。

应该足以让你自己测试和了解。

@Krishna Kumar,给出的答案不是很清楚,也没有直接解决这个问题。你能找到正确的答案吗?@y2k shubham我的理解是Spark会尝试加载内存中的所有内容,如果不能,它会抛出与内存相关的异常