假设我正在从S3文件夹中读取100个文件。每个文件的大小为10 MB。当我执行df = spark.read.parquet(s3 path)
时,如何在任务之间分配文件(或分区)?例如。在这种情况下,df
将具有100个分区,并且如果spark有10个正在运行的任务用于将该文件夹的内容读取到数据帧中,那么如何将这些分区分配给这10个任务?它是以循环方式进行的,还是每个任务在基于范围的分布中获得相等比例的所有分区,还是其他?任何指向相关资源的指针也将非常有帮助。谢谢。
答案 0 :(得分:0)
任务与分区数成正比。
Spark尝试直接从原始分区中对行进行分区,而不给驱动程序带来任何负担。
分区逻辑是从随机选择的目标分区开始,然后以循环方法将分区分配给行。请注意,为每个源分区选择了“开始”分区,并且可能会发生冲突。
最终的分布取决于许多因素:源/目标分区的数量以及数据框中的行数。