他的回复:
华为云ID: hw06188332Spark读取文件分区方式:Spark读取文件,底层其实使用的就是Hadoop的读取方式分区数量的计算方式:totalSize:文件所有字节数综合(包括回车换行)numSplits:分区数量(如果为0,设置为1)goalSize = totalSize / numSplits --每个分区存放的字节如果有个7个字节的文件,会生成3个分区,因为根据Hadoop分区方式,剩余字节数大于分区字节数大小的10%,就会产生新的分区。7 / 3 = 2 ... 1 (1.1) 一共3个分区Spark读取文件,分区数据是如何分配的:1、数据以行为单位进行读取 Spark读取文件,采用的是Hadoop的方式读取,所以是一行一行读取,和字节数没有关系2、数据读取时以偏移量为单位,偏移量不会被重复读取1@@ => 0122@@ => 3453 => 63、数据分区的偏移量范围的计算0 => [0, 3] 每个分区3个字节,偏移量从3开始,偏移量+31 => [3, 6] 第二个分区开始偏移量为0 + 32 => [6, 7] 最后剩余一个字节最终结果0 =》12 0号分区读取0123偏移量,Hadoop按行读取,所以最终读取012345偏移量1 =》3 偏移量不会被重复读取,所以只是读取了6偏移量2 =》 已经没有数据,所以为空