记录一次Spark小问题的求证过程

前言

某天和小伙伴讨论时候,聊到一个小问题,RDD的默认分区数和啥有关,当时得出的答案是和total-executor-cores有关,核数是几个,那它就是几个分区,经过求证似乎并不是这样,记录一下过程

正题

首先随便来了个action算子,然后点进去一探究竟

记录一次Spark小问题的求证过程

然后我们跳转到了RDD.scala,说老实的你随便来个action,点进来都是runJob,然后我们就顺其自然点进去吧

记录一次Spark小问题的求证过程

进到SparkContext.scala,然后这里4个参数分别为RDD

记录一次Spark小问题的求证过程

此时我们知道我们点进去partitions应该能得到我们想要的答案

记录一次Spark小问题的求证过程

此时我们鼠标选中getPartitions,点击IDEA的navigate,或者好像默认快捷键是F4吧,我也忘了,点出那个Type Hierarchy

记录一次Spark小问题的求证过程

我们挑了一个hadoopRDD来开刀

记录一次Spark小问题的求证过程

点进来看到返回具体分区数的方法

记录一次Spark小问题的求证过程

所以在HDFS上的数据,如果我们要加载它,数据小于128M,正常返回一个分区,如果128M<data<128M*2,返回两个分区···依次类推

这部分就是程序最初的分区情况,而且多少个分区就对应多少个task,当我们的executor-cores大于最初生成的task数,那么实际出现的task数就会按照最初的task数算,partition数量会按照最初split的操作去决定,也就是多余的cores此时会出现空转

从而证明 executor-cores和分区数毛线关系没有···