1.textFile算子源码
1.1.源码
def textFile(
path: String,
minPartitions: Int = defaultMinPartitions): RDD[String] = withScope {
assertNotStopped()
hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
minPartitions).map(pair => pair._2.toString).setName(path)
}
1.2.textFile算子参数
path:文本所在路径;HDFS、本地文件系统(在所有节点上可用)或任何hadoop支持的文件系统;
minPartitions :最小分区;默认值根据defaultMinPartitions决定;
1.3.算子逻辑
调用hadoopFile算子生成fileRDD;
将文件路径作为rdd名称;
2.defaultMinPartitions参数
2.1.defaultMinPartitions源码
def defaultMinPartitions: Int = math.min(defaultParallelism, 2)
2.1.2.算子逻辑
在defaultParallelism参数值(默认分区参数)和2之间取最小值;
2.2.defaultParallelism算子
2.2.1.源码
def defaultParallelism: Int = {
assertNotStopped()
taskScheduler.defaultParallelism
}
override def defaultParallelism(): Int = backend.defaultParallelism()
override def defaultParallelism(): Int = {
conf.getInt("spark.default.parallelism", math.max(totalCoreCount.get(), 2))
}
override def defaultParallelism(): Int =
scheduler.conf.getInt("spark.default.parallelism", totalCores)
2.2.2.算子逻辑
taskSheduler的默认分区值的设置分2种:
1. 全局配置的spark.default.parallelism参数有值,就取参数值
2. 全局配置的spark.default.parallelism参数没有设置
集群模式下,在cpu总核数 vs 2之间取最大值
local模式下,取cpu总核数;
2.3.defaultMinPartitions参数逻辑
spark.default.parallelism参数有值为p:
当p>2时,defaultMinPartitions=2,即textFile()算子默认最小分区数为2;
当p<=2时,defaultMinPartitions=p,即textFile()算子默认最小分区数为p;
spark.default.parallelism参数无值:
集群模式下,defaultMinPartitions=2,即textFile()算子默认最小分区数为2;
local模式下,defaultMinPartitions=min(cpu总核数,2);
3.hadoopFile算子
3.1.源码
def hadoopFile[K, V](
path: String