Spark从非分区外部数据源并行读取数据的相关疑问
Spark数据读取相关问题解答
问题1:未分区数据源创建多分区时是否重复全量扫描?
不会。当外部数据源本身没有分区时,Spark会将数据源的数据按字节范围/数据块逻辑拆分成指定的10个分区,每个分区只会读取自己负责的那一段数据,不会全量扫描整个数据源。比如针对文本文件,Spark会计算文件总大小,拆分出10个连续的字节区间,每个分区只读取对应区间的内容,再做后续处理,不存在每个分区重复扫全量数据的情况。
问题2:是否需要多Spark Session实现并行读取?
不需要。单个Spark Session是Spark应用的核心上下文,负责整个应用的资源调度、任务分配。并行读取的实现依赖于Task:每个分区对应一个Task,Spark会将这些Task分配到集群的Executor节点上,利用Executor的CPU核心并行执行这些Task,整个过程由单个Session统一调度管理,完全不需要创建多个Session。
问题3:每个分区是否存于独立Executor?
不是绝对的。一个Executor可以拥有多个CPU核心,只要有空闲核心,就能同时运行多个分区对应的Task。只有当集群中Executor的数量≥分区数,且每个Executor只分配一个Task时,才会出现每个分区的Task在独立Executor上运行的情况;通常情况下,多个分区的Task会被分配到同一个Executor的不同核心上并行处理。
内容的提问来源于stack exchange,提问作者PratikRathi
相关产品推荐
相关产品推荐

