#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")