假设本地有一个文件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