
[英]How to set dynamic spark.sql.shuffle.partitions in pyspark?
[英]How to dynamically choose spark.sql.shuffle.partitions
我目前正在处理使用火花和foreach分区开到MySQL的连接,并将其插入到一批1000数据库中的数据正如提到SparkDocumentation的默认值spark.sql.shuffle.partitions
是200,但我想保持它充满活力。 那么,我该如何计算呢。 因此,既没有选择非常高的值导致性能下降也没有选择非常小的值导致OOM
。
尝试以下选项 -
val numExecutors = spark.conf.get("spark.executor.instances").toInt
val numExecutorsCores = spark.conf.get("spark.executor.cores").toInt
val numShufflePartitions = (numExecutors * numExecutorsCores)
spark.conf.set("spark.sql.shuffle.partitions", numShufflePartitions)
这将帮助您根据用于spark作业的执行程序和执行程序核心设置正确数量的随机分区,而不会影响性能并导致内存不足问题。
如果你仍然离开了记忆,他们设置在下面的财产 -
spark.conf.set("spark.executor.memoryOverhead", "3G")
其他选项是计算数据Dataframe
大小, didvie
hdfs
块大小执行,并使用结果数设置spark.sql.shuffle.partitions
。
您可以使用df.repartition(numPartitions)方法执行此操作。 您可以根据输入/中间输出做出决定,并将numPartitions传递给repartition()方法。
df.repartition(numPartitions) or rdd.repartition(numPartitions)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.