Фильтр Spark pushdown без производительности столбца раздела - PullRequest
0 голосов
/ 02 августа 2020

У меня есть вопрос относительно фильтрации в Spark, когда вы не включаете столбцы разделов в фильтр.

Представьте, что у меня есть следующие данные, разделенные по дате:

path/date=20200721/part-0000.parquet
                   part-0001.parquet
                   part-0002.parquet
path/date=20200722/part-0000.parquet
                   part-0001.parquet
                   part-0002.parquet
...

И у данных есть один столбец с именем «действие», около 30% данных которого имеют значение 0, а остальная часть данных - 1

Если я запустил следующее:

spark.read.parquet("s3a://path").filter("action = 0")

Должен ли Spark отображать и сканировать все файлы, расположенные по «пути» от источника? Или есть какая-то pushdown-фильтрация? Или Spark применяет только выталкивающий фильтр, если в фильтре присутствует столбец раздела?

Спасибо.

1 Ответ

1 голос
/ 02 августа 2020

1. Должен ли Spark отображать и сканировать все файлы, расположенные по «пути» от источника?

Yes, поскольку вы не фильтрация по искровому списку столбцов разделов и сканирование всех файлов

2. Есть ли какая-то выталкивающая фильтрация?

Будет pushdown filter применяется к каждому файлу при чтении

3.spark применяет только выталкивающий фильтр, если в фильтре присутствует столбец раздела?

No, Фильтр раздела будет применен там, где присутствует столбец раздела, иначе при сканировании файла будет применено раскрытие предиката.

partition filter vs pushdown filter

  • Вы можете проверить все эти детали, проверив план объяснения в Spark .explain(true)

Чтобы проверить, проталкивается ли фильтр вниз enabled or not:

spark.sql("set spark.sql.parquet.filterPushdown").show(10,false)
//+--------------------------------+-----+
//|key                             |value|
//+--------------------------------+-----+
//|spark.sql.parquet.filterPushdown|true |
//+--------------------------------+-----+
...