textFile函数
SparkContext.textFile(path,minPartitions)
设置两个文件:1.txt 和 2.txt放在data目录下,读取data目录,结合实际分区理解最小分区数对最终分区个数的影响。
1.txt文件内容如下
12
3456
2.txt文件内容如下
78
910
测试代码
val conf: SparkConf = new SparkConf().setAppName("test").setMaster("local")
val sc = new SparkContext(conf)
val line = sc.textFile("/data", 5)
line.saveAsTextFile("output")
结果
解释
textFile读取文件,调用的是Hadoop的TextInputFormat
总字节数 13 byte
最小分区数 5
每个分区字节数 13 / 5 = 2 byte
余下的字节数 13 % 2 = 1 byte
【注意:1 > 0.1 * 2(当余下的数据量大于分区数据量的0.1倍时,会产生新的分区】
所以总分区数应该为7
此外,当有多个文件时(比如本例中data目录下存放有1.txt和2.txt两个文件),按照每个分区字节数(本例为2)对每个文件单独分区,得到各个文件对应的分区即可(原因:不能跨文件读取字节)
以上边的1.txt和2.txt为例:读取到的分区为
1.txt得到3个分区 【12】【3456】【空】【空】
2.txt得到3个分区【78】【901】【空】
故,最后结果得到的是,part-0000 - part0006这7个分区,测试结果也是正常的