Spark scala в чем разница между предикатом pushdown и partitioning с точки зрения обработки и stge - PullRequest
0 голосов
/ 07 мая 2020

Я использую фрейм данных и встречал эти термины. Я не мог полностью их понять, если возможно, вы можете привести пример обоих?

1 Ответ

0 голосов
/ 07 мая 2020

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, меньше, чем существующие данные, лежащие в файловой системе. Надеюсь, это поможет

...