1.Spark读取文件采用的是Hadoop的读取规则
文件切片规则:以字节方式来切片
数据读取规则:以行为单位来读取
注意:文件中回车换行也占2个字节
2.问题:文件到底切成几片(分区的数量)?
文件字节数(10),预计切片数量(2)
10/2=》5byte
源码:
totalSize = 10
goalSize = totalSize / numSplits = 10 / 2 = 5 …1 => 3
//所谓的最小分区数,取决于总的字节数是否能整除分区数并且剩余的直接达到一个比率
//实际产生的分区数可能大于最小分区数
3.分区的数据如何存储?
分区数据是以行为单位读取的,而不是字节,但是会考虑偏移量(数据的offset)的设置
//TODO 1.分几个区?(规则 )
//10byte/4 = 2byte…2byte => 5
//0=>(0,2)
//1=>(2,4)
//2=>(4,6)
//3=>(6,8)
//4=>(8,10)
//TODO 2.数据如何存储?(数据)
//数据是以行的方式读取,但是会考虑偏移量(数据的offset)的设置
1.txt内容:
1
2
3
4
设置5个分区数;
//1@@ => 012
//2@@ =>345
//3@@ =>678
// 4 =>9
按规则读取数据(展示):
//0=>(0,2) =>1
//1=>(2,4) =>2
//2=>(4,6) =>3
//3=>(6,8) =>
//4=>(8,10) =>4
TODO hadoop分区是以文件为单位进行划分的,读取数据不能跨越文件
1.txt 内容:
1
234
设置3个分区数;
// 1@@ => 012
// 234 => 345
// 12/3=4个文件
// 1.txt =>(0,4)
=>(4,6)
// 2.txt =>(0,4)
=>(4,6)