有没有办法统计Hadoop上Spark查询中达到的分区数



如果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,对于某些查询,它可能会动态更改分区/任务的数量?这意味着什么?

相关内容

  • 没有找到相关文章

最新更新