我有一个类似于的Spark SQL流
dataFrame
.join(anotherDataFrame, columns)
.repartition(partitionColumn)
.save()
在join
步骤中,我希望spark.sql.adaptive.enabled
为true
,因为这将加快连接速度。
在repartition
步骤中,我希望spark.sql.adaptive.enabled
是false
,因为如果这是真的,它可能会更改分区,并且保存的结果将在错误的分区中格式化。
如何在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"> 理论上,尽管使用提示可以为每个逻辑运算符指定不同的"设置"("一步">)。 事实上, 然而,这需要重新编写Spark SQL引擎(Catalyst Framework)。Join
逻辑运算符在规划时"使用"广播提示来选择广播散列联接(负责规划逻辑查询计划的不是逻辑运算符本身,而是执行规划策略)。