2.4、从外部存储(文件)创建rdd的数据如何划分
-
代码案例
val conf = new SparkConf().setAppName("Simple Application").setMaster("local[*]") val sc = new SparkContext(conf) // 读取本地文件 val readline = sc.textFile("input/1.txt") readline.collect.foreach(println)
-
源码解读
/* 假设字节数为 7 默认分区数为 2: goalSize = 7 / 2 --> 3byte 再根据goalSize计算实际分区数: 实际分区个数 = 7 / 3 --> 2 余数为 1 ; 1/3 = 0.33 所以实际分区数为: 2 + 1 = 3 */ /* 如上3个分区 每个分区有3个字节 每个分区的根据文件的起始偏移量来划分 0: [0,3] 1: [3,6] 2: [6,7] 还要注意:如果某个分区刚刚截取到一行的中间,那么他将会把整行都放在该分区中, 因为hadoop读取分区是一行一行的读取,下一个分区将会从下一行开始读取。 */
-
总结
文件创建rdd 的数据划分根据每个分区的根据文件的起始偏移量来划分,切数据是一行一行的读取,如果某个分区刚刚截取到一行的中间,那么他将会把整行都放在该分区中。