Spark Core快速入门系列(9) | Spark读取文件的切片规则

读取文件的切片规则

截取了源码重要的部分

//所有的文件
FileStatus[] files = listStatus(job);
//记录所有文件的总大小
//numSlits是minPartitions=2
long totalSize = 0;
long goalSize = totalSize / (numSplits == 0 ? 1 : numSplits);
//前部分没有配置,那么就是1   minSplitSize看源码也是1
long minSize = Math.max(job.getLong(org.apache.hadoop.mapreduce.lib.input.
FileInputFormat.SPLIT_MINSIZE, 1), minSplitSize);
//保存所有切片
ArrayList<FileSplit> splits = new ArrayList<FileSplit>(numSplits);
如果文件可以切割
if (isSplitable(fs, path)) {
      //local:32M   集群:128M
      long blockSize = file.getBlockSize();
      long splitSize = computeSplitSize(goalSize, minSize, blockSize);
//用来记录文件切后剩余的大小
bytesRemaining -= splitSize;

那举个列子一共有4个文件
a.txt 100k b.txt 100k c.txt 100k d.txt 400k
请问一个有几个切片?
答案:5个
在这里插入图片描述

在这里插入图片描述
前三个文件100k 只有一个切片
在这里插入图片描述
在这里插入图片描述

如果找不到源码-分享步骤

看源码
先ctrl+左键点击testFile
在这里插入图片描述
在这里插入图片描述
找到getPartitions
在这里插入图片描述
ctrl+h
在这里插入图片描述
找到这里就可以了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46548855/article/details/108137565