RDD分区的设定规则

RDD分区的设定规则涉及多个因素,具体如下:

(1)local模式

默认并行度取决于本地机器的核数,即

local: 没有指定CPU核数,则所有计算都运行在一个线程当中,没有任何并行计算

local[K]:指定使用K个Core来运行计算,比如local[2]就是运行2个Core来执行

local[*]: 自动帮你按照CPU的核数来设置线程数。比如CPU有4核,Spark帮你自动设置4个线程计算

(2)集群模式

集群模式包含Stanalone、Yarn模式,Mesos的默认并行度为8

默认并行度取决于所有executor上的总核数与2的最大值,比如集群模式的设置如下:

--num-executors 5

--executor-cores 2

上面配置Executor的数量为5,每个Executor的CPU Core数量为2,

executor上的总核数10,则默认并行度为Max(10,2)=10。

一、默认分区规则

  1. 从本地文件创建

    分区数默认为: $$ \text{min}( \text{defaultParallelism}, 2 ) $$ 其中 defaultParallelism 由集群配置决定(如 spark.default.parallelism)。

  2. 从HDFS文件创建

    分区数等于HDFS文件的块数(Block),每个块对应一个分区。

  3. 通过parallelize()创建

    分区数由 spark.default.parallelism 参数控制。若未配置:

    • 本地模式:等于CPU核心数
    • 集群模式:等于所有Executor的总核心数

二、分区调整方法

  1. 手动指定分区数

    在创建RDD时通过参数直接指定:

    复制代码
    sc.textFile("path", numPartitions = N)
    sc.parallelize(data, numSlices = N)
  2. 转换操作后的分区变化

    • filter()map()等操作:继承父RDD的分区数
    • union():分区数为父RDD分区数之和
    • join()groupByKey():默认使用哈希分区,分区数由 spark.default.parallelism 决定
  3. Shuffle操作的分区控制

    通过参数指定Shuffle后的分区数:

    复制代码
    rdd.reduceByKey(func, numPartitions = N)
    rdd.repartition(N)  // 强制重分区
    rdd.coalesce(N)      // 合并分区(无Shuffle)

三、分区数优化原则

  1. 分区数与并行度

    每个分区对应一个Task,分区数应满足: $$ \text{总分区数} \geq \text{集群总核心数} \times 2 $$ 避免核心闲置或任务排队。

  2. 分区大小建议

    单个分区数据量建议在 128MB~1GB 之间。过大易导致OOM,过小增加调度开销。

  3. 动态调整场景

    • 数据倾斜时:对Key重新分区(如 repartition
    • 迭代计算时:通过 persist() 缓存合适的分区数

四、关键配置参数

参数名 默认值 作用
spark.default.parallelism CPU核心数 控制RDD默认分区数
spark.sql.shuffle.partitions 200 控制DataFrame的Shuffle分区数

提示 :实际分区数需结合数据规模、集群资源和计算逻辑动态调整。可通过 rdd.getNumPartitions 查看当前分区数。

相关推荐
巧克力味的桃子14 小时前
Spark 课程核心知识点复习汇总
大数据·分布式·spark
Light6016 小时前
智能重构人货场:领码SPARK破解快消行业增长困局的全景解决方案
spark·数字化转型·ai大模型·智能营销·快消行业·供应链优化
叫我:松哥1 天前
基于大数据和深度学习的智能空气质量监测与预测平台,采用Spark数据预处理,利用TensorFlow构建LSTM深度学习模型
大数据·python·深度学习·机器学习·spark·flask·lstm
火龙谷2 天前
day1-部署集群
spark
火龙谷2 天前
day3-构建数仓
spark
阿里云大数据AI技术3 天前
迅雷基于阿里云 EMR Serverless Spark 实现数仓资源效率与业务提升
spark
伟大的大威3 天前
在 NVIDIA DGX Spark部署 Stable Diffusion 3.5 并使用ComfyUI
stable diffusion·spark·comfyui
叫我:松哥3 天前
基于Spark智能推荐算法的农业作物推荐系统,推荐算法使用Spark ML风格推荐引擎
大数据·python·机器学习·spark-ml·spark·flask·推荐算法
是阿威啊3 天前
【用户行为归因分析项目】- 【企业级项目开发第五站】数据采集并加载到hive表
大数据·数据仓库·hive·hadoop·spark·scala
云器科技3 天前
告别Spark?大数据架构的十字路口与技术抉择
大数据·架构·spark·lakehouse·数据湖仓