1.集合数据是如何分区的
0 until 3 是从0到3并不包含3
List(1,2,3,4,5) 长度为5 分区数量为3
(1).partitions方法 参数为 数组长度 分区数量
(2).迭代是0 until 3 即0,1,2
(3).将0,1,2变成tuple(start,end)
a. start= (i*数组长度)/分区数量
b. end=((i+1)*数组长度)/分区数量
(4).slice(from,until)从from开始 until结束(不包含) 注意:slice是数组下标
2.文件读取之后文件的分区规则 textfile
(1).默认最小分区为2 math.min(defaultParallelism,2)
(2).如果不想用默认分区数量,可以通过 textfile 的第二个参数指定分区数
(3).分区数量的计算方式:
totalSize = 7 总字节数
goalSize = 7 / 2 = 3 byte 三个字节一个分区
7 / 3=2....1 ( 1/3 > 1.1%所以要再进行分区) 总共分三个分区。
3.数据在分区中存放的位置
a.spark读取文件,底层其实使用的就是Hadoop的读取方式,所以是一行一行读取,和字节数没有关系
b.数据读取时以偏移量为单位
c.数据分区的偏移量范围的计算{字节数除以分区数商就是每个分区的偏移量数}
(1).偏移量
1234567@@=>012345678
89@@=>9 10 11 12
0=> 13
(2).偏移量的范围
[0,7]=>1234567
[7,14]=>890