【大数据学习 | 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的数量是一致的。

集合并行化

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

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

相关推荐
小蒜学长2 小时前
医疗报销系统的设计与实现(代码+数据库+LW)
数据库·spring boot·学习·oracle·课程设计
羊小猪~~3 小时前
MYSQL学习笔记(九):MYSQL表的“增删改查”
数据库·笔记·后端·sql·学习·mysql·考研
ok0604 小时前
oracle怎么创建定时任务
数据库·oracle
桃林春风一杯酒4 小时前
HADOOP_HOME and hadoop.home.dir are unset.
大数据·hadoop·分布式
史迪仔01124 小时前
[SQL] 事务的四大特性(ACID)
数据库·sql
clarance20154 小时前
聊聊 FocusSearch/focus_mcp_sql:Text2SQL 的新玩法
数据库·sql
桃木山人5 小时前
BigData File Viewer报错
大数据·java-ee·github·bigdata
B站计算机毕业设计超人5 小时前
计算机毕业设计Python+DeepSeek-R1高考推荐系统 高考分数线预测 大数据毕设(源码+LW文档+PPT+讲解)
大数据·python·机器学习·网络爬虫·课程设计·数据可视化·推荐算法
数造科技5 小时前
紧随“可信数据空间”政策风潮,数造科技正式加入开放数据空间联盟
大数据·人工智能·科技·安全·敏捷开发
浪九天7 小时前
Orcale、MySQL中参数类型的详解和运用场景(不带示例)
数据库·mysql·oracle