分区

分区数对于应用程序的性能和/或成功终止至关重要。

弹性分布式数据集(RDD)是 Spark 的主要抽象。RDD 被拆分为分区,这意味着分区是数据集的一部分,是它的一部分,或者换句话说,是它的一部分。

分区数越大,每个分区的大小越小。

但是,请注意,大量分区会对 Hadoop 分布式文件系统(HDFS)造成很大压力,而 HDFS 必须保留大量元数据。

分区数与内存使用量有关,memoryOverhead 问题可能与此数字( 个人体验 )有关。

一个常见的错误为新用户是他们的 RDD 转变成一个 RDD 只有一个分区,通常看起来像这样:

data = sc.textFile(file)
data = data.coalesce(1) 

这通常是一个非常糟糕的主意,因为你告诉 Spark 将所有数据放在一个分区! 请记住:

Spark 中的一个阶段将一次在一个分区上运行(并将该分区中的数据加载到内存中)。

因此,你告诉 Spark 一次处理所有数据,这通常会导致与内存相关的错误(例如内存不足),甚至是空指针异常。

因此,除非你知道自己在做什么,否则请避免在一个分区中重新分区 RDD!