【无标题】

RDD并行度和分区

  1. 能够并行计算的任务数量,我们称之为并行度。例如只有一个executor-cores,那并行计算的任务就只有一个
  2. 分区是能够并行计算的最大的并行度

1.分区个数生成规则

1.textFile 文件数据源

1.分区相关参数定义

    val rdd=sc.textFile(path="xxxx",用户指定的分区)<br>
    如果没有用户指定的分区,则用defaultMinPartitions<br>
    defaultMinPartitions: Int = math.min(defaultParallelism, 2)<br>
    defaultParallelism= scheduler.conf.getInt("spark.default.parallelism", totalCores)<br>
  1. 分区数据计算方式

    使用了HadoopFile.spark读取文件底层是hadoop的方式

    totalSize 代表该文件的大小

    gogalSize= totalSize/并行度=M(byte)

    M代表每个分区的字节。
  2. 1.1概念

    在hadoop划分分区时,如果余下的分区长度大于M数量的10%就放在新分区,如果小于10%就放在老的分区

2.makeRDD 并行度

1. spark.makrRDD在没有设置分区的时候下,在默认情况下,会从spark.default.parallelism中获取分区
2. 如果没有spark.default.parallelism,则使用totalCores属性,这个属性是当前环境的最大可用核数

3.以分区形式保存

 rdd.saveAsTextFile("output")

2. spark读取TextFile数据分区的分配方式

  1. 数据以行为单位进行读取

    • spark读取文件,采用的是hadoop的方式读取,一行一行的读取,和字节数没有关系
    • 数据读取时以偏移量为单位。偏移量不会被重新读取
    • 分区设定值大于需要处理的数据长度(byte),则以最小单位1Byte来进行区分。如输入为15byte,但是 有80个分区。15/80=0,则最后只有15/1=15个分区
    • 如果数据源为多个文件,计算分区时以文件为单位

    分区读取实例:输入为1##2##3 ,默认分区为2。
    下面是相关内容

    1##  =>012
    2##  =>345
    3    =>6
    

    数据分区的偏移量范围的计算,由于3在第一行被读了,记录了偏移量。因此在第二行的时候就不会继续读3

    // 0=> [0,3] =>12 
    // 1=> [3,6]
    // 2=> [6,7]
    

3. 并行度和分区

多少个分区可以表示多少个任务同时运行

如下图所示176个分区,textFile输入有两个文件,内容一样,文件的length是88Byte,手动设置的分区是1000。因为88/1000<1,则默认为1Byte为1个分区。又由于计算分区是以文件为单位。因此拥有88*2=176个Task

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值