如何为结构化查询的不同代码部分指定分区数



我有一个类似于的Spark SQL流

dataFrame
.join(anotherDataFrame, columns)
.repartition(partitionColumn)
.save()

join步骤中,我希望spark.sql.adaptive.enabledtrue,因为这将加快连接速度。

repartition步骤中,我希望spark.sql.adaptive.enabledfalse,因为如果这是真的,它可能会更改分区,并且保存的结果将在错误的分区中格式化。

如何在Spark SQL流的不同步骤中更改spark.sql.adaptive.enabled的行为?

例如:当只有15行时,我想根据一列将它们重新划分为3个分区。但是因为spark.sql.adaptive.enabled为true,所以重新分区步骤根本不起作用,它总是1个分区

如何更改在spark sql流的不同步骤中启用的spark.sql.adaptive.e的行为?

您不能。该设置是针对每个SparkSession的,并且绑定到一个SparkSession的所有查询都具有该属性和任何其他属性的相同值。

需要明确的是,不存在"流程中的一步">的概念。有一些逻辑运算符,它们一起创建了一个结构化查询。您可以将一个或多个逻辑运算符称为"a step">,将结构化查询调用为"a flow">


理论上,尽管使用提示可以为每个逻辑运算符指定不同的"设置"("一步">)。

事实上,Join逻辑运算符在规划时"使用"广播提示来选择广播散列联接(负责规划逻辑查询计划的不是逻辑运算符本身,而是执行规划策略)。

然而,这需要重新编写Spark SQL引擎(Catalyst Framework)。

相关内容

  • 没有找到相关文章

最新更新