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 查看当前分区数。

相关推荐
肌肉娃子3 天前
20260227.spark.Spark 性能刺客:千万别在 for 循环里写 withColumn
spark
B站计算机毕业设计超人4 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
十月南城4 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
Asher05094 天前
Spark核心基础与架构全解析
大数据·架构·spark
FYKJ_20108 天前
springboot大学校园论坛管理系统--附源码42669
java·javascript·spring boot·python·spark·django·php
鸿乃江边鸟11 天前
Spark Datafusion Comet 向量化Rust Native--Native算子ScanExec以及涉及到的Selection Vectors
大数据·rust·spark·arrow
派可数据BI可视化11 天前
一文读懂系列:数据仓库为什么分层,分几层?数仓建模方法有哪些
大数据·数据仓库·信息可视化·spark·商业智能bi
码字的字节11 天前
锚点模型:数据仓库中的高度可扩展建模技术详解
大数据·数据仓库·spark
数据知道11 天前
PostgreSQL:详解 PostgreSQL 与Hadoop与Spark的集成
hadoop·postgresql·spark