用于火花提交的Parallelize RDD的spark.default.parallelism默认为2

Sam*_*ami 6 scala apache-spark

带有独立主节点和2个工作节点的Spark独立群集,每个工作节点上有4个cpu核心。所有工人共有8个核心。

通过spark-submit运行以下命令时(未设置spark.default.parallelism)

val myRDD = sc.parallelize(1 to 100000)
println("Partititon size - " + myRDD.partitions.size)
val totl = myRDD.reduce((x, y) => x + y)
println("Sum - " + totl)
Run Code Online (Sandbox Code Playgroud)

返回分区大小的值2。

通过连接到Spark独立集群使用spark-shell时,相同代码返回正确的分区大小8。

可能是什么原因?

谢谢。

Joe*_*den 5

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

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

从文档中拉出:

spark.default.parallelism
Run Code Online (Sandbox Code Playgroud)

对于像reduceByKey和的分布式随机播放操作join,父RDD中的分区数量最多。对于没有父RDD的并行化操作,它取决于集群管理器:

本地模式:本地计算机上的内核数

Mesos细颗粒模式:8

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

通过变换返回RDDS分区的默认数量一样joinreduceByKey和并行化时,不能由用户设置。