假设本地有一个文件example.txt大小为200m时,使用textFile从本地文件系统中读取这个文件

    val conf = new SparkConf().setAppName("test").setMaster("local[*]")
    val sc = new SparkContext(conf)
    val data: RDD[Array[String]] = sc.textFile("example.txt")
    println("data.getNumPartitions:" + data.getNumPartitions)
    //输出:data.getNumPartitions:7
    //计算方式为ceil(200/32)

Spark中通过textFile()方法读取文件的时候,内部调用了hadoopFile类. 在spark本地测试运行并且读取本地文件的时候,textFile会调用hadoopFile类,而hadoopFile类在没有读取到配置文件hdfs-site.xml的情况下会使用默认配置对读取到的文件使用hadoop中的方法进行默认切block,而默认的blocksize大小为32M,当spark读取到这个文件时,便读取到了被hadoop标记切block的格式,之后spark会默认根据这个block进行split,之后partition的数量在没有指定的情况下会默认为split也即block的数量.

//spark-parent_2.11  
// org/apache/spark/SparkContext.scala:814  
   * Read a text file from HDFS, a local file system (available on all nodes), or any
   * Hadoop-supported file system URI, and return it as an RDD of Strings.
   * @param path path to the text file on a supported file system
   * @param minPartitions suggested minimum number of partitions for the resulting RDD
   * @return RDD of lines of the text file
  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)

单从名字上来看,这个类的实现是由hadoop来实现的,也即Spark内部对hadoop文件系统的依赖.spark调用了hadoop的方法以方便进行测试.
因此,当你想要对FileSystem进行一些配置时,去spark官网是找不到相关的配置说明的,比如:
block块的大小: "fs.local.block.size", 32* 1024 * 1024=32M

//spark-parent_2.11  
//org/apache/spark/input/WholeTextFileRecordReaderSuite.scala:43
  override def beforeAll() {
    // Hadoop's FileSystem caching does not use the Configuration as part of its cache key, which
    // can cause Filesystem.get(Configuration) to return a cached instance created with a different
    // configuration than the one passed to get() (see HADOOP-8490 for more details). This caused
    // hard-to-reproduce test failures, since any suites that were run after this one would inherit
    // the new value of "fs.local.block.size" (see SPARK-5227 and SPARK-5679). To work around this,
    // we disable FileSystem caching in this suite.
    super.beforeAll()
    val conf = new SparkConf().set("spark.hadoop.fs.file.impl.disable.cache", "true")
    sc = new SparkContext("local", "test", conf)
    // Set the block size of local file system to test whether files are split right or not.
    sc.hadoopConfiguration.setLong("fs.local.block.size", 32)
    sc.hadoopConfiguration.set("io.compression.codecs",
      "org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec")
    factory = new CompressionCodecFactory(sc.hadoopConfiguration)
// 这里获取的不是文件本身的大小,它的大小从上面的length就可以知道
// 这里获取的是HDFS文件块(跟文件本身没有关系)的大小      
// HDFS文件块的大小由两个参数决定,分别是 dfs.block.size 和 fs.local.block.size     
// 在HDFS集群模式下,由 dfs.block.size 决定,对于Hadoop2.0来说,默认值是128MB       
// 在HDFS的local模式下,由 fs.local.block.size 决定,默认值是32MB  
long blockSize = file.getBlockSize();   // 128MB             
// 这里计算splitSize,根据前面计算的goalSize=419MB,minSize为1       
long splitSize = computeSplitSize(goalSize, minSize, blockSize);        
long bytesRemaining = length;       // 如果文件大小大于splitSize,就按照splitSize对它进行分块       
// 由此可以看出,这里是为了并行化更好,所以按照splitSize会对文件分的更细,因而split会更多

相关链接:从源码看Spark读取Hive表数据小文件和分块的问题

展开阅读全文 MRF8S21172HR3, MRF8S21172HSR3 2110-2170 MHz, 42 W Avg., 28 V W-CDMA, LTE Lateral N-Channel RF Pow... Multicore Processing: Virtualization and Data Center 长江证券、某城商行、中南大等嘉宾确定,武汉Meetup免费报名 MRF18060ALR3 1805-1880 MHz, 60 W, 26 V Lateral N-Channel RF Power MOSFET - Archived PostgreSQL 每周新闻 2023-6-14 MRF281SR1, MRF281ZR1 1930-1990 MHz, 4 W, 26 V Lateral N-Channel Broadband RF Power MOSFETs - Arch... 全面升级!一文看懂「腾讯地图商户权益」 深入学习 Linux 操作系统的存储 IO 堆栈 生成式AI技术的应用与发展 libpq SDK 发送 SQL 和解析结果 高性能存储 SIG 月度动态:DSMS 完成 Anolis 23 预览版发布,欢迎体验和反馈 GreatSQL社区月报 | 2023.06 推送服务接入指导(HarmonyOS篇) MHPA21010 2110-2170 MHz, 10 W, 23.7 dB RF High Power LDMOS Amplifier - Archived Kubernetes Service 工作原理 Apache Dubbo 云原生可观测性的探索与实践 云原生网关如何实现安全防护能力 突破大模型 | Alluxio助力AI大模型训练-成功案例(一) 图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index MMRF1308HR5, MMRF1308HSR5 1.8-600 MHz, 600 W CW, 50 V Broadband RF Power MOSFETs - Data Sheet 【有奖体验】叮!你有一张 3D 卡通头像请查收 KaiwuDB 亮相 2023 可信数据库发展大会 云原生基础设施实践:NebulaGraph 的 KubeBlocks 集成故事 MRFIC0916 Data Sheet: 100 to 2500 MHz General Purpose RF Cascode Amplifier 聚势生态,繁荣商业 | openGauss亮相DTCC 2023 获取 NGINX QUIC+HTTP/3 预览版的二进制包 拓展知识 启望未来 | 记内蒙古移动《AntDB ACA初级认证培训》活动 浅谈Redis - 热点key问题 | 京东云技术团队 MRFE6VP100HR5, MRFE6VP100HSR5 1.8-2000 MHz, 100 W, 50 V Broadband RF Power LDMOS Transistors 开发者实战 | 从零开始带你用英特尔开发者套件 AI 爱克斯板 + OpenVINO™ 做视频流检测 MW6IC2240NBR1, MW6IC2240GNBR1 2110-2170 MHz, 4.5 W Avg., 28 V, 2 x W-CDMA RF LDMOS Wideband Integ... 中移在线携手华为联合打造云客服全栈自主创新样板点,输出客服能力,服务千行百业 数据库领域2023上半年盘点 5 V, 3.3 V and 2.5 V dual UART, 5 Mbit/s (max.) with 32-byte FIFOs, IrDA encoder/decoder, and 68 ... 统一门户|WorkPlus整合内部应用,构筑企业统一的智能工作入口 ARCHIVED - MW5IC970NBR1, MW5IC970GNBR1 800-900 MHz, 70 W, 28 V RF LDMOS Wideband 2-Stage Power Am... 一文了解 MySQL 全新版本模型 技术分享 | 一文了解 MySQL Optimizer Trace 的神奇功效 给世界一个更好的选择,“龙蜥+超级探访”首期嘉宾预告片震撼来袭! MD7IC21100NR1, MD7IC21100GNR1, MD7IC21100NBR1 2110-2170 MHz, 32 W Avg., 28 V Single W-CDMA RF LDM... 98ASA10717D, 1832-01, 1832, 128 LD TQFP, 14 x 14 x 1.0, 0.4 Pitch, 7.2 x 7.2 Exposed Pad 【我和openGauss的故事】Navicat连接openGauss_5.0.0 企业版数据库 分享实录 | 将 NGINX 打造成功能强大的 API 网关(下) 构建高效物理计划:从逻辑查询到算子实现 OceanBase 是如何关闭主备线程的? MySQL 和 MariaDB 版本管理的历史背景及差异 Flink CDC & MongoDB 联合实时数仓的探索实践 ARCHIVED - AFT18S230-12N 1805-1880 MHz, 50 W Avg, 28 V RF Power LDMOS Transistor Data Sheet 深入理解 Serverless 计算的并发度 MRF6S21100HR3, MRF6S21100HSR3 2110-2170 MHz, 23 W Avg., 28 V, 2 x W-CDMA Lateral N-Channel RF Pow... 3分钟了解容器技术的核心原理 Advanced Development with Microsoft®.NET Micro Framework 2.0 RocketMQ 5.0 无状态实时性消费详解 活动分享 | 开发者嘉年华—— PaddlePaddle ×文心大模型 还在为618电商推送方案烦恼?我们帮你做好了! 生成式AI掀起创意革命 文本 Embedding 基本概念和应用实现原理 Project Board Student Learning Kit Factsheet i.MX RT CROSSOVER MCUS & ZEPHYR™ OS IMPROVE RESPONSIVENESS, REDUCE COSTS Library of Macros for Optimization Using eMAC and MAC Programmer's Manual MySQL 8.0.29 instant DDL 数据腐化问题分析 使用 OpenVINO™ 加速生成式 AI | OpenVINO™ DevCon 第二期开启报名! TDA8026ET - 5 slots smart card interface i.MX RT1010 Crossover MCUs Data Sheet for Consumer Products 使用 OpenTelemetry 构建可观测性 04 - 收集器 ARCHIVED - MRF8P20160HR3, MRF8P20160HSR3 1880-2025 MHz, 37 W Avg., 28 V Single W-CDMA Lateral N-C... 基于 prefetch 的 H5 离线包方案 | 京东云技术团队 MRF187, MRF187R3, MRF187SR3 1.0 GHz, 85 W, 26 V Lateral N-Channel Broadband RF Power MOSFETs - Ar... PostgreSQL 每周新闻 2023-8-9 ARCHIVED - A2T23H300-24S 2300-2400 MHz, 66 W Avg., 28 V Airfast® RF Power LDMOS Transi... MRF9060MR1, MRF9060MBR1 945 MHz, 60 W, 26 V Lateral N-Channel Broadband RF Power MOSFETs - Archived 生成式AI:创新未来的新引擎 货拉拉基于 Flink 计算引擎的应用与优化实践 MHL19936N 1900-2000 MHz, 12 W, 29 dB RF Linear LDMOS Amplifier - Archived