有什么方法可以计算在 Hadoop 上的 Spark 查询中达到了多少个分区?

Is there any way to count how many partitions reached in Spark query on Hadoop?

如果查询时间超过 10 分钟,我想停止 Spark 查询。

但这只是针对一个分区。

我的意思是如果查询到达 Hadoop 中的 2 个分区,那么时间将是 20 分钟。

例如,为此我需要 10 分钟的阈值:

SELECT Max(col1),
       Min(col2)
FROM   my_parititoned_table_on_hadoop
WHERE  partitioned_column = 1 

为此我需要 20 分钟的阈值:

SELECT Max(col1),
       Min(col2)
FROM   my_parititoned_table_on_hadoop
WHERE  partitioned_column IN ( 1, 2 )

这可能吗?

没有。 Spark 中没有这样的支持。

AQE 对于某些查询可能会动态改变分区/任务的数量?那是什么意思?

标题中问题的答案(“是否有任何方法可以计算有多少分区...”)如果您的数据存储为“是”镶木地板。您可以 运行 explain() 查询并查看在查询执行期间将扫描多少个分区。例如

scala> spark.sql("select * from tab where p > '1' and p <'4'").explain()
== Physical Plan ==
*(1) FileScan parquet default.tab[id#375,desc#376,p#377] Batched: true, Format: Parquet, 
     Location: PrunedInMemoryFileIndex[hdfs://ns1/user/hive/warehouse/tab/p=2, hdfs://ns1/user/hive/warehouse..., 
     **PartitionCount: 2,** PartitionFilters: [isnotnull(p#377), (p#377 > 1), (p#377 < 4)], 
     PushedFilters: [], ReadSchema: struct<id:int,desc:string>

...从中可以很容易地解析出 PartitionCount: x

第二个问题(从技术上讲,这是一个语句 -- “如果查询时间超过 10 分钟,我想停止 Spark 查询”) 是一个“不”,正如@thebluephantom 所说。