Scala Parallelize RDD的spark.default.parallelism对于spark submit默认为2

Scala Parallelize RDD的spark.default.parallelism对于spark submit默认为2,scala,apache-spark,Scala,Apache Spark,Spark独立群集,每个工作节点上有一个主节点和两个工作节点以及4个cpu核心。所有工人共有8个核心 通过spark submit运行以下操作时(未设置spark.default.parallelism) val myRDD=sc.parallelize(1到100000) println(“分区大小-”+myRDD.partitions.size) val totl=myRDD.reduce((x,y)=>x+y) println(“总和-”+totl) 它返回分区大小的值2 当通过连接sp

Spark独立群集,每个工作节点上有一个主节点和两个工作节点以及4个cpu核心。所有工人共有8个核心

通过spark submit运行以下操作时(未设置spark.default.parallelism)

val myRDD=sc.parallelize(1到100000)
println(“分区大小-”+myRDD.partitions.size)
val totl=myRDD.reduce((x,y)=>x+y)
println(“总和-”+totl)
它返回分区大小的值2

当通过连接spark standalone cluster使用spark shell时,相同的代码返回正确的分区大小8

原因可能是什么


谢谢

spark.default.parallelism
默认为所有机器上所有内核的数量。ParallelizeAPI没有父RDD来确定分区的数量,因此它使用
spark.default.parallelism

运行
spark submit
时,您可能正在本地运行它。尝试使用与spark shell相同的启动配置提交您的
spark submit

从文档中提取:

spark.default.parallelism
对于分布式洗牌操作,如
reduceByKey
join
,父RDD中的最大分区数。对于无父RDD的并行化等操作,它取决于群集管理器:

本地模式:本地计算机上的磁芯数

细晶粒模式:8

其他:所有executor节点上的内核总数或2个,以较大者为准


RDD中由转换(如
join
reduceByKey
)返回的默认分区数,如果不是由用户设置,则将其并行化。

Yes使用相同的启动配置提交,并且可以在web ui和history server中查看作业。。看起来其他人也注意到了这一点,但它应该默认为执行者的核心总数。