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

Apache spark 如何为结构化查询的不同代码部分指定分区数?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个Spark SQL流,如: dataFrame .join(anotherDataFrame, columns) .repartition(partitionColumn) .save() 在join步骤中,我希望spark.sql.adaptive.enabled为true,因为这将加快连接速度 在repartition步骤中,我希望spark.sql.adaptive.enabled为false,因为如果为true,则可能会更改分区,并且保存的结果将在错误的分区中格式化

我有一个Spark SQL流,如:

dataFrame
  .join(anotherDataFrame, columns)
  .repartition(partitionColumn)
  .save()
join
步骤中,我希望
spark.sql.adaptive.enabled
true
,因为这将加快连接速度

repartition
步骤中,我希望
spark.sql.adaptive.enabled
false
,因为如果为true,则可能会更改分区,并且保存的结果将在错误的分区中格式化

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

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

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

你不能。该设置是根据
SparkSession
进行的,并且绑定到一个
SparkSession
的所有查询都具有此属性和任何其他属性的相同值

只是要澄清一下(呃),没有“流程中的一步”的概念。有一些逻辑运算符一起创建结构化查询。您可以将一个或多个逻辑运算符称为“一个步骤”,将结构化查询称为“一个流”,但老实说,我以前从未听说过它们,它们可能会非常混乱


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

实际上,
Join
逻辑运算符“使用”广播提示在计划时选择广播哈希联接(负责计划逻辑查询计划的不是逻辑运算符本身,而是执行计划策略)

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