Фильтры с искровым напором

#apache-spark

Вопрос:

Когда вы df.explain() это сделаете, в физическом плане можно увидеть PushedFilters нажатие предиката for в виде строки. Это мы можем извлечь, df.queryExecution.simpleString но я хочу, чтобы это было в формате JSON, чтобы я мог напрямую проверить, было ли что-то помещено в PushedFilters, как мне это извлечь?

например, с веб-сайта яцека ласвоски пример

 cities.where('name === "Warsaw").queryExecution.executedPlan
res21: org.apache.spark.sql.execution.SparkPlan =
*Project [id#128L, name#129]
 - *Filter (isnotnull(name#129) amp;amp; (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)] данные для некоторого тестирования, которое я провожу

Комментарии:

1. Если вам нужен JSON, проанализируйте строку, если только у объекта плана нет средства получения этой информации

2. да, я в основном надеялся, что найдется добытчик

Ответ №1:

Понял это

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