Spark之textFile切片详解

本文详细探讨了Spark中的textFile方法,包括如何处理目录、压缩文件和通配符。内容涉及textFile的第二个参数对分区数的影响,以及在未指定时如何使用defaultMinPartitions。通过源码分析,揭示了从textFile到HadoopRDD的流程,最终在getPartitions方法中确定文件切片的方式。总结了当不传或传入第二个参数时,分区数的计算规则,并指出这些参数如何影响Hadoop的切片过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

textFile

spark所有基于文件的输入方法,都支持目录读取、压缩文件、和通配符,

​ 比如:

textFile("/my/directory")
textFile("/my/directory/*.txt")
textFile("/my/directory/*.gz")

texeFile(1,2)
该方法还采用可选的第二个参数来控制文件的分区数(但并不是最终的分区数就是这个设置的值),分区规则可以参考源码。

接下来我们捋一下它的流程。

首先按住crtl,鼠标左键点击进入textFile方法,

1.查看textFile方法的定义

 第一个参数是传入的文件路径
 第二个参数是最小的分区数量(并不代表是最终的分区数量)
 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)
  }

★插播一条广告
如果我们指定textFile的第二个参数后,minPartitions就是我们指定的参数
如果我们不指定的话,它会使用defaultMinPartitions。

我们进入defaultMinPartitions,看看它是怎么定义的

def defaultMinPartitions: Int = math.min(defaultParallelism, 2)
默认并行度和2取最小值,那么defaultParallelism是什么???接下来我们继续进入defaultParallelism
def defaultParallelism: Int = {
    assertNotStopped()
    taskScheduler.defaultParallelism
}
它调用了taskScheduler的默认并行度,我们继续深入

似乎进入了一个死胡同

def defaultParallelism(): Int
我们左键点击到defaultParallelism,然后按alt+shift+h(idea的快捷键)查看它的实现类里面具体方法

在这里插入图片描述

来到了这里

override def defaultParallelism(): Int = backend.defaultParallelism()
继续点defaultParallelism

仿佛又来到了一个死胡同

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值