【问题标题】:Spark PushedFiltersSpark PushedFilters
【发布时间】:2021-07-28 18:36:16
【问题描述】:

当您执行df.explain() 时,可以在物理计划中看到用于谓词下推的PushedFilters 作为字符串。我们可以使用df.queryExecution.simpleString 提取它,但我希望它为 JSON,因此我可以直接测试是否在 PushedFilters 中放入了某些内容,我该如何提取它?

例如来自 jacek laswoski 的 website 示例

cities.where('name === "Warsaw").queryExecution.executedPlan
res21: org.apache.spark.sql.execution.SparkPlan =
*Project [id#128L, name#129]
+- *Filter (isnotnull(name#129) && (name#129 = Warsaw))
   +- *FileScan parquet [id#128L,name#129] Batched: true, 
Format: ParquetFormat, 
InputPaths: file:/Users/jacek/dev/oss/spark/cities.parquet, 
PartitionFilters: [], 
PushedFilters: [IsNotNull(name), EqualTo(name,Warsaw)], 
ReadSchema: struct<id:bigint,name:string>

我希望能够提取PushedFilters: [IsNotNull(name), EqualTo(name,Warsaw)] 以进行我正在做的一些测试

【问题讨论】:

  • 如果你想要 JSON,解析字符串,除非计划对象有获取该信息的 getter
  • 是的,我基本上希望有一个吸气剂

标签: apache-spark


【解决方案1】:

想通了

df.queryExecution.sparkPlan.collectFirst{case p : FileSourceScanExec => p}.get.metadata("PushedFilters")

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 2016-07-07
    相关资源
    最近更新 更多