分区如何分配给Spark中的任务

How are partitions assigned to tasks in Spark

假设我正在从 S3 文件夹中读取 100 个文件。每个文件的大小为 10 MB。当我执行 df = spark.read.parquet(s3 path) 时,文件(或更确切地说是分区)如何跨任务分布?例如。在这种情况下 df 将有 100 个分区,如果 spark 有 10 个任务 运行 用于将此文件夹的内容读取到数据框中,如何将分区分配给这 10 个任务?它是循环方式,还是每个任务在基于范围的分布中获得相等比例的所有分区,或者其他?任何指向相关资源的指针也将非常有帮助。谢谢。

任务与分区数成正比

Spark 尝试直接从原始分区对行进行分区,而不给驱动程序带来任何东西。

分区逻辑是从随机选择的目标分区开始,然后以循环方式将分区分配给行。请注意,为每个源分区选择了 "start" 个分区,并且可能会发生冲突。

最终分布取决于许多因素:source/target 分区的数量和数据框中的行数。