set spark.sql.shuffle.partitions=40
Это относится только к JOINs и AGGregations, насколько я понимаю.
Попробуйте что-то вроде этого - мой собственный пример:
val df2 = df.repartition(40, $"c1", $"c2")
Вот вывод
val df2 = df.repartition(40, $"c1", $"c2").explain
== Physical Plan ==
Exchange hashpartitioning(c1#114, c2#115, 40)
...
Может динамически устанавливать num разделов:
n = some calculation
val df2 = df.repartition(n, $"c1", $"c2").explain