Как предотвратить предикат pushdown? - PullRequest
0 голосов
/ 14 мая 2018

Недавно я работал с Spark с источником данных JDBC.Рассмотрим следующий фрагмент:

val df = spark.read.(options).format("jdbc").load();
val newDF = df.where(PRED)

PRED - это список предикатов.

Если PRED - простой предикат, такой как x = 10, запрос будет выполняться намного быстрее.Однако, если есть некоторые неэквивалентные условия, такие как date > someOtherDate or date < someOtherDate2, запрос выполняется намного медленнее, чем без предиката.Как вы, возможно, знаете, механизмы проверки баз данных таких предикатов работают очень медленно, в моем случае даже в 10 раз медленнее (!).

Для предотвращения ненужного нажатия предикатов я использовал:

val cachedDF = df.cache()
val newDF = cachedDF.where(PRED)

Но это требует много памяти и - из-за проблемы, упомянутой здесь - Неперспективное поведение набора данных Spark - Я не могу unpersist cachedDF.

Есть ли другой способ избежать нажатия?предикаты вниз?Без кеширования и без написания собственного источника данных?

Примечание. Даже если есть возможность отключить предикатное нажатие, оно применимо только в том случае, если другой запрос все еще может его использовать.Итак, если бы я написал:

// some fancy option set to not push down predicates
val df1 = ...
// predicate pushdown works again
val df2 = ...
df1.join(df2)// where df1 without predicate pushdown, but df2 with

1 Ответ

0 голосов
/ 17 мая 2018

Для этого выпуска был открыт билет JIRA.Вы можете следить за этим здесь: https://issues.apache.org/jira/browse/SPARK-24288

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...