我目前正在使用spark和foreach分区处理数据,打开与mysql的连接,并以1000的批量将其插入数据库。如SparkDocumentation中提到的spark.sql.shuffle.partitions
默认值为200但我想保持它的动态。那么,我该如何计算呢。因此,既没有选择非常高的值导致性能下降也没有选择导致OOM
的非常小的值。
答案 0 :(得分:0)
尝试以下选项-
spark.conf.set("spark.executor.memoryOverhead", "3G")
这将帮助您根据用于火花作业的执行程序和执行程序核心设置正确的随机数分区,而不会影响性能并导致内存不足问题。
如果您仍然无法记忆,请在属性下方设置它们-
Dataframe
另一种选择是计算didvie
大小和hdfs
,以spark.sql.shuffle.partitions
块大小计算,并使用结果数来设置{{1}}。
答案 1 :(得分:-3)
您可以使用 df.repartition(numPartitions)方法执行此操作。您可以根据输入/中间输出做出决定,并将 numPartitions传递给repartition()方法。
df.repartition(numPartitions) or rdd.repartition(numPartitions)