Apache spark 如何为结构化查询的不同代码部分指定分区数?
我有一个Spark SQL流,如: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,则可能会更改分区,并且保存的结果将在错误的分区中格式化
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框架)