RDD分区逻辑
RDD partitioning logic
我想了解 RDD 分区逻辑。 RDD 是跨节点分区的,但想了解这种分区逻辑是如何工作的。
我有分配给它的 4 个内核的 VM。我创建了两个 RDD ,一个来自 HDFS ,一个来自并行化操作。
第一次创建了两个分区,但在第二次操作中创建了 4 个分区。
我检查了没有分配给文件的块——它是 1 个块,因为文件非常小,但是当我在该文件上创建 RDD 时,它显示了两个分区。为什么是这样 ?我在某处读到,分区也取决于核心的数量,在我的情况下,4 个核心仍然不满足该输出。
有人可以帮助理解吗?
textFile
的完整签名是:
textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String]
使用第二个参数,minPartitions
,您可以设置您想要获得的最小分区数量。如您所见,默认情况下它设置为 defaultMinPartitions
,它又定义为:
def defaultMinPartitions: Int = math.min(defaultParallelism, 2)
defaultParalellism
的值是使用 spark.default.parallelism
设置配置的,默认情况下,当 运行 Spark 在本地模式下时,这取决于您的核心数。在你的例子中这是 4,所以你得到 min(4, 2)
,这就是你得到 2 个分区的原因。
我想了解 RDD 分区逻辑。 RDD 是跨节点分区的,但想了解这种分区逻辑是如何工作的。
我有分配给它的 4 个内核的 VM。我创建了两个 RDD ,一个来自 HDFS ,一个来自并行化操作。
第一次创建了两个分区,但在第二次操作中创建了 4 个分区。
我检查了没有分配给文件的块——它是 1 个块,因为文件非常小,但是当我在该文件上创建 RDD 时,它显示了两个分区。为什么是这样 ?我在某处读到,分区也取决于核心的数量,在我的情况下,4 个核心仍然不满足该输出。
有人可以帮助理解吗?
textFile
的完整签名是:
textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String]
使用第二个参数,minPartitions
,您可以设置您想要获得的最小分区数量。如您所见,默认情况下它设置为 defaultMinPartitions
,它又定义为:
def defaultMinPartitions: Int = math.min(defaultParallelism, 2)
defaultParalellism
的值是使用 spark.default.parallelism
设置配置的,默认情况下,当 运行 Spark 在本地模式下时,这取决于您的核心数。在你的例子中这是 4,所以你得到 min(4, 2)
,这就是你得到 2 个分区的原因。