【发布时间】:2021-04-06 03:58:23
【问题描述】:
在 spark 中设置 conf spark.default.parallelism 和调用方法 rdd.coalesce() 有什么区别?
两者的结果相同吗?
【问题讨论】:
标签: java apache-spark rdd
在 spark 中设置 conf spark.default.parallelism 和调用方法 rdd.coalesce() 有什么区别?
两者的结果相同吗?
【问题讨论】:
标签: java apache-spark rdd
根据docs,spark.default.parallelism是
由转换返回的 RDD 中的默认分区数,例如
join、reduceByKey和parallelize(当用户未设置时)。
默认值为:
对于像 reduceByKey 和 join 这样的分布式 shuffle 操作, 父 RDD 中的最大分区数。
对于像这样的操作 在没有父 RDD 的情况下并行化,这取决于集群管理器:
本地模式:本地机器上的核心数
Mesos 细粒度 模式:8
Others:所有执行器节点上的核心总数或2个, 以较大者为准
rdd.coalesce() 方法允许您减少 RDD 中的分区数,例如通过调用 rdd.coalesce(1) 您会将分区数减少到 1。
因此,它们通常不会给出相同的结果,但您可以想象spark.default.parallelism 的设置类似于
rdd.{transformations...}.repartition({value of spark.default.parallelism})
在join 或reduceByKey 转换之后。
【讨论】: