栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spark之RDD分区规则

Spark之RDD分区规则

1.RDD数据从集合中创建

a.不指定分区      

        从集合创建rdd,如果不手动写分区数量的情况下,默认分区数跟本地模式的cpu核数有关

         local : 1个   local[*] : 笔记本所有核心数    local[K]:K个

b.指定分区

object fenqu {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkCoreTest")
    val sc: SparkContext = new SparkContext(conf)

    //1)4个数据,设置4个分区,输出:0分区->1,1分区->2,2分区->3,3分区->4
    val rdd: RDD[Int] = sc.makeRDD(Array(1, 2, 3, 4), 4)

    //2)4个数据,设置3个分区,输出:0分区->1,1分区->2,2分区->3,4
    //val rdd: RDD[Int] = sc.makeRDD(Array(1, 2, 3, 4), 3)

    //3)5个数据,设置3个分区,输出:0分区->1,1分区->2、3,2分区->4、5
    //val rdd: RDD[Int] = sc.makeRDD(Array(1, 2, 3, 4, 5), 3)

    rdd.saveAsTextFile("output")

    sc.stop()
  }
}

规则

        分区的开始位置 = (分区号 * 数据总长度)/分区总数

        分区的结束位置 =((分区号 + 1)* 数据总长度)/分区总数

2.文件中读取后创建

a.默认

        默认取值为当前核数和2的最小值,一般为2

b.指定

1).分区数量的计算方式:

totalSize = 10

goalSize = 10 / 3 = 3(byte) 表示每个分区存储3字节的数据

分区数= totalSize/ goalSize = 10 /3 => 3,3,4

4子节大于3子节的1.1倍,符合hadoop切片1.1倍的策略,因此会多创建一个分区,即一共有4个分区  3,3,3,1

2). Spark读取文件,采用的是hadoop的方式读取,所以一行一行读取,跟字节数没有关系

3).数据读取位置计算是以偏移量为单位来进行计算的。

4).数据分区的偏移量范围的计算

        0 => [0,3]         1     012        0 => 1,2

        1 => [3,6]         2     345        1 => 3        

        2 => [6,9]         3     678        2 => 4

        3 => [9,9]         4      9           3 => 无

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/734911.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号