我当然知道spark.sql.shuffle.partitions
配置,
但例如,当我在只有200行的小数据集上设置此配置300时,配置无效,实际分区数只有2,
另一个例子,我在有300亿行的数据集上设置此配置3000,配置也无效,实际的分区数只有600,
我们看到,当我们在一个小数据集上设置一个大值的分区配置时,该配置将无效,
所以我只想知道SparkSQL中shuffle时,Spark是如何决定下一阶段的分区数的?或者如何强制此配置有效
My Spark SQL如下所示:
set spark.sql.shuffle.partitions=3000;
with base_data as (
select
device_id
from
table_name
where
dt = '20210621'
distribute by
rand()
)
select count(1) from base_data
一般情况下,窄转换不会更改分区数。
宽转换转换不会更改分区数。
窄转换在窄转换中,计算单个分区中的记录所需的所有元素都位于父RDD的单个分区中。使用分区的有限子集来计算结果。窄变换是map((和filter((的结果。
宽转换--在宽转换中,计算单个分区中的记录所需的所有元素可能存在于父RDD的多个分区中。该分区可能存在于父RDD的许多分区中。宽转换是groupbyKey和reducebyKey的结果。
问题更改后的更新:
你可以假设";spark.sql.shuffle.分区"作为一个查询提示,在我看来,我们正在强制执行器为联接或聚合创建该数量的分区,除非我们非常确定没有分组密钥,否则我们不应该使用该值。
这将使网络上的数据不必要地搅乱。