如果Spark查询耗时超过10分钟,我想停止该查询。
但这只是针对一个分区。
我的意思是,如果查询到达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 )
这可能吗?
标题中问题的答案("有没有办法计算多少分区…">(是一个";是";如果您的数据存储为镶木地板。您可以在查询上运行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>
由此可以非常容易地解析CCD_ 2。
第二个问题(从技术上讲是一个语句--"如果查询耗时超过10分钟,我想停止Spark查询">(是一个"问题";否";,正如@thebluephantom所说。
否。Spark中没有这样的支持。
还有AQE,对于某些查询,它可能会动态更改分区/任务的数量?这意味着什么?