首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spark.sql.shuffle.partitions和spark.default.parallelism有什么区别?

spark.sql.shuffle.partitions和spark.default.parallelism有什么区别?
EN

Stack Overflow用户
提问于 2017-08-16 10:22:50
回答 2查看 135.2K关注 0票数 95

spark.sql.shuffle.partitionsspark.default.parallelism有什么不同

我尝试在SparkSQL中设置这两个任务,但第二阶段的任务号总是200。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-16 11:16:07

在回答here时,spark.sql.shuffle.partitions配置了在为连接或聚合洗牌数据时使用的分区数量。

当用户未显式设置时,spark.default.parallelismRDD中由joinreduceByKeyparallelize等转换返回的默认分区数。请注意,spark.default.parallelism似乎只适用于原始RDD,并且在处理数据帧时被忽略。

如果您正在执行的任务不是连接或聚合,并且您正在处理数据帧,那么设置这些设置将不会有任何效果。但是,您可以通过在代码中调用df.repartition(numOfPartitions) (不要忘记将其分配给一个新的val)来设置分区的数量。

要更改代码中的设置,只需执行以下操作:

代码语言:javascript
复制
sqlContext.setConf("spark.sql.shuffle.partitions", "300")
sqlContext.setConf("spark.default.parallelism", "300")

或者,也可以在使用spark-submit将作业提交到集群时进行更改

代码语言:javascript
复制
./bin/spark-submit --conf spark.sql.shuffle.partitions=300 --conf spark.default.parallelism=300
票数 117
EN

Stack Overflow用户

发布于 2019-08-07 09:03:49

spark.default.parallelism是spark设置的默认分区数,默认为200。如果您想要增加分区的数量,那么可以在spark配置中或在运行spark SQL时应用spark.sql.shuffle.partitions属性来设置分区的数量。

正常情况下,当我们遇到内存拥塞时会使用此大小,我们会看到以下错误: spark error:java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE

因此设置您可以为每个分区分配256MB的分区,并可用于为您的进程设置。

另外,如果分区数接近2000,则将其增加到2000以上。因为spark对分区< 2000和>2000应用了不同的逻辑,这将通过减少内存占用来提高代码性能,因为如果> 2000,数据默认是高度压缩的。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45704156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档