Spark 重新分区未按预期工作
Spark repartition is not working as expected
我用的是spark-sql 2.3.1,我设置
spark.sql.shuffle.partitions=40
在我的代码中'
val partitioned_df = vals_df.repartition(col("model_id"),col("fiscal_year"),col("fiscal_quarter"))
当我说
println(" Number of partitions : " + partitioned_df.rdd.getNumPartitions)
它给出 40 作为输出,事实上,理想情况下重新分区后计数应该在 400 左右,为什么重新分区在这里不起作用?我在这里做错了什么?如何解决?
这是意料之中的,the scaladoc for repartition
声明:
Returns a new Dataset partitioned by the given partitioning
expressions, using spark.sql.shuffle.partitions as number of
partitions. The resulting Dataset is hash partitioned.
可能你对重新分区的理解有误。当您按列 c
重新分区时,所有 c
具有相同值的行都在同一个分区中,但是 1 个分区可以包含 c
的多个值
set spark.sql.shuffle.partitions=40
这仅适用于 JOIN 和聚合,这是我的理解。
尝试这样的事情——我自己的例子:
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
我用的是spark-sql 2.3.1,我设置
spark.sql.shuffle.partitions=40
在我的代码中'
val partitioned_df = vals_df.repartition(col("model_id"),col("fiscal_year"),col("fiscal_quarter"))
当我说
println(" Number of partitions : " + partitioned_df.rdd.getNumPartitions)
它给出 40 作为输出,事实上,理想情况下重新分区后计数应该在 400 左右,为什么重新分区在这里不起作用?我在这里做错了什么?如何解决?
这是意料之中的,the scaladoc for repartition
声明:
Returns a new Dataset partitioned by the given partitioning expressions, using spark.sql.shuffle.partitions as number of partitions. The resulting Dataset is hash partitioned.
可能你对重新分区的理解有误。当您按列 c
重新分区时,所有 c
具有相同值的行都在同一个分区中,但是 1 个分区可以包含 c
set spark.sql.shuffle.partitions=40
这仅适用于 JOIN 和聚合,这是我的理解。
尝试这样的事情——我自己的例子:
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