• spark分区计算方式


    1.默认分区
    setMaster("local"):采用的是默认值,核数1
    setMaster("local[*]"):最大分区数与物理机cpu核数相同,最小值为2,具体分区数量需要计算
    2.从不同位置创建rdd,分区数量
    -从集合中创建rdd
      取决于分配给应用的cpu核数
    -从外部文件中创建rdd
      math.min(取决于分配给应用的cpu核数,2)

    3.分区计算方法

    指定分区:
    1.在textFile方法中,第二个参数minPartitions表示最小分区数
    2.在实际计算分区数时,会根据文件的总大小和最小分区数相除运算
    & 如果余数为0
    那么最小分区数,就是实际的分区数
    & 如果余数不为0
    那么实际分区数,要计算。。。。。
    例1:
    22个字节,自定义3个分区
    每个分区存储字节数=22/3取整 分区数
    =3+1(1为22/3多出的一个字节,需要单独放到一个分区,若剩余字节数大于每个分区存储的字节数,还需要再添加分区) 每个分区的数据按照:0~7|7~14|14~21放置,如果文件中一行的字节数超过了7,那会把一整行都读出,因为spark使用的是readlines,所以即使定义的第一个分区应该放置下标为0-6的数据,单也有可能将一整行,比如8个字节全取出,第二个分区仍会按照7-13的下标,把数据全部取出,但此时7、8号数据已经被取走,所以第二个分区会没有7、8号数据,只有9-13号数据,以此类推,第3、4个分区也是同样的方式取数据。总之,spark会按照算好的分区来取数,但由于spark是使用readlines来取数,取出的数据也受每一行的数据数量影响。
    例2:
    19个字节,5分区,则分区数=19/5 + 4/3 + 1 =5,因为剩下的4个字节大于每个分区存储的字节,所以存满3个字节后还要再加一个分区
    例3:
    37个字节,2个分区,分区数=2
    计算方法:每个分区字节数=37/2=18,第二个分区算好后还剩下一个字节,1<1.1,所以不会再单独创建分区,所以分区数是2,不是3

  • 相关阅读:
    python 发送邮件
    java 获取两个时间之前所有的日期
    java 子线程定时去更改主线程的变量
    post 两种方式 application/x-www-form-urlencoded和multipart/form-data
    aws 社交媒体技术大会 部分总结
    java操作Mongodb数据库
    实体类注解 @entity
    spring security 部分注解讲解
    @Column
    阿里云搭建服务器
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/14593884.html
Copyright © 2020-2023  润新知