有什么方法可以计算在 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 所说。
如果查询时间超过 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 所说。