【大数据学习 | Spark-Core】详解分区个数

RDD默认带有分区的,那么创建完毕rdd以后他的分区数量是多少?

从hdfs读取文件的方式是最正规的方式,我们通过计算原理可以推出blk的个数和分区数量是一致的,本地化计算。

我们可以发现数据的读取使用的是textInputFormat,读取的数据内容是文本。

实现InputFormat接口必须实现getSplits和getRecordReader两个方法。FireInputFormat接口继承了InputFormat接口,实现了文件的切分(getSplits方法),而TextInputFormat类与ORCInputFormat继承并实现了FireInputFormat接口。TextInputFormat类实现了getRecordReader方法,即读取器为LineRecordReader,即对文本数据一行一行读取。

数据结构的实现由上图进行规划

FileInputFormat中对于文件的切分进行了分割,切分几个部分就可以实现分区的个数。

文件在hdfs存储的文件在spark中的使用是不同的。

存储的时候单位是block块 128M。

读取的时候是以spark为主,spark的读取大小叫做split切片。默认情况下,split-size = block-size。

千万要将存储和计算区分开。

分区的多少完全看切片是多少 ,和hdfs的存储无关,但是如果切片大小和block的大小一致的话那么就可以实现本地化计算,即不需要从其他机器通过网络传输或拉取一些数据到本地的executor进行计算。

numSplits的个数可以由参数传入。

由读取的总的数据量totalSize / 期望分区的个数goalSize可以得到期望切片的大小。

计算规则:块的大小与期望切片的大小取最小值,但二者最小值不能小于配置的minSize。否则按照minSize大小进行切片划分分区。

以上是源码逻辑分析

计算规则演示如下:

代码演示如下:

bash 复制代码
#追加形式增大文件的大小
cat word.txt >> word1.txt 
cat word.txt >> word2.txt 

最终形成结果为上图

分区数量为4

然后继续增加文件

bash 复制代码
cat word.txt >> word3.txt 

结果如上图:

最终分区数量为5

在读取hdfs的文件的时候,一般文件都比较大,所以期望分区在不设定的时候默认值是2,切片大小肯定大于128M,那么以128M为主肯定切片和block的数量是一致的。

集合并行化。

根据集群中的核数进行适配,启动的时候有几个核,产生分区数量就是几个。

因为在计算的过程中,我们是为了做测试,为了达到最大的性能,所以分区数量会自己适配。

相关推荐
Easy_API1 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
GlobalInfo1 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
光影6273 小时前
Unittest单元测试基础速记
测试工具·单元测试·json·测试覆盖率
微订校园外卖平台3 小时前
校园外卖平台选模板还是定制:架构、数据流与验收清单
大数据·架构·外卖系统·本地生活·微订
Eloudy4 小时前
Qwen2.5-14B-Instruct-AWQ 模型文件结构分析
大数据·elasticsearch·搜索引擎
ZLongTeng5 小时前
EIDE的launch.json文件
json
Decay__5 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
重生之高冷汉堡包7 小时前
跨境电商运营团队如何安全交接店铺账号?多账号权限管理指南
大数据
lusklusklusk7 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
玩AI的奶茶7 小时前
MiniMax H3 出 30 秒长片:显存账、拼接法和一次的成本
大数据·人工智能·ai·gpu算力·算力租赁