Predicate pushdown - это когда при фильтрации результатов запроса потребитель parquet-mr API в Spark может получить все записи из API, а затем оценить каждую запись по предикатам условия фильтрации. Как будто вы объединяете два больших паркетных стола -
SELECT * FROM museum m JOIN painting p ON p.museumid = m.id WHERE p.width > 120 AND p.height > 150
Однако для этого требуется собрать все записи в памяти, даже не совпадающие. При использовании предиката pushdown эти условия вместо этого передаются в библиотеку parquet-mr, которая оценивает предикаты на более низком уровне и отбрасывает несовпадающие записи без их предварительной сборки. Таким образом, данные сначала фильтруются на основе условия, а затем поступают в память для объединения операций.
Разделение в Spark фактически является логически разделенными данными. Когда вы читаете файл из файла s3 / ADLS / gzip HDFS, он создает отдельный раздел для каждого файла. Позже, когда вы обрабатываете свои данные на основе случайного разделения, раздел фрейма данных изменяется соответственно. Поэтому я думаю, что разделение и раскрытие предикатов имеют только один общий фактор, когда следует извлекать данные из файлов столбцов, если применяется фильтр, данные, поступающие в каждый раздел в Spark, меньше, чем существующие данные, лежащие в файловой системе. Надеюсь, это поможет