Apache spark 如何将分区分配给Spark中的任务
假设我正在从一个S3文件夹中读取100个文件。每个文件的大小为10 MB。当我执行df=spark.read.parquet(s3路径)时,文件(或者更确切地说是分区)是如何在任务之间分布的?例如,在这种情况下,Apache spark 如何将分区分配给Spark中的任务,apache-spark,distributed-computing,Apache Spark,Distributed Computing,假设我正在从一个S3文件夹中读取100个文件。每个文件的大小为10 MB。当我执行df=spark.read.parquet(s3路径)时,文件(或者更确切地说是分区)是如何在任务之间分布的?例如,在这种情况下,df将有100个分区,如果spark有10个任务正在运行以将此文件夹的内容读取到数据帧中,那么如何将这些分区分配给这10个任务?它是以循环方式进行的,还是在基于范围的分布中,每个任务获得的所有分区的比例相等,还是其他什么?任何指向相关资源的指针都会非常有用。谢谢。任务与分区的数量成正比。
df
将有100个分区,如果spark有10个任务正在运行以将此文件夹的内容读取到数据帧中,那么如何将这些分区分配给这10个任务?它是以循环方式进行的,还是在基于范围的分布中,每个任务获得的所有分区的比例相等,还是其他什么?任何指向相关资源的指针都会非常有用。谢谢。任务与分区的数量成正比。
Spark尝试直接从原始分区对行进行分区,而不给驱动程序带来任何东西
分区逻辑是从随机选取的目标分区开始,然后以循环方式将分区分配给行。请注意,为每个源分区选择“开始”分区,可能会发生冲突
最终的分布取决于许多因素:源/目标分区的数量以及数据帧中的行数。谢谢您的回答。您能详细说明一下分区逻辑是从随机选取的目标分区开始的吗…?也许举个例子会更清楚。