Как ведет себя Spark, если мы используем udf внутри оператора case when, применяет ли он udf ко всем записям, а затем применяет фильтр case when? - PullRequest
0 голосов
/ 19 июня 2020

Я написал запрос, который вызывает функцию UDF в некотором сценарии ios, и для значения rest он должен отдавать часть else. Но в соответствии с физическим планом он показывает, что запускает UDF для всех значений столбца, но затем фильтрует записи на основе моего условия «когда».

Пример запроса: Spark. sql ("select *, случай, когда col1 in ('1', '2'), затем callUDF (col1) else col2 end from table ")

Итак, если col1 находится в списке, то UDF должен быть вызван и вернуть значение, но в если это не так, то возвращает другое значение столбца.

Нет проблем, с которыми вы столкнетесь в обычном сценарии, но в случае, если ваш UDF требует некоторого набора значений, только тогда он терпит неудачу, поскольку он не ожидает других значений.

Есть ли другой обходной путь, пожалуйста, поделитесь своими мыслями.

...