Контекст
Во многих SQL-запросах, которые я пишу, я обнаруживаю, что комбинирую предопределенные функции Spark точно таким же образом, что часто приводит к подробному и дублированному коду, и мой инстинкт разработчика состоит в том, чтобы захотеть его реорганизовать.
Итак, у меня такой вопрос: есть ли способ определить какой-то псевдоним для комбинаций функций, не прибегая к udfs (которых следует избегать по соображениям производительности) - цель состоит в том, чтобы сделать код более понятным и очиститель. По сути, я хочу что-то вроде udfs
, но без потери производительности. Кроме того, эта функция ДОЛЖНА быть вызвана из запроса spark-sql, который можно использовать в spark.sql
вызовах.
Пример
Например, предположим, что моя бизнес-логика состоит в том, чтобы перевернуть некоторую строку и хэшировать ее следующим образом: (обратите внимание, что комбинация функций здесь не имеет значения, важно то, что это некоторая комбинация существующих предварительно определенных функций искры - возможно, многие из их)
SELECT
sha1(reverse(person.name)),
sha1(reverse(person.some_information)),
sha1(reverse(person.some_other_information))
...
FROM person
Есть ли способ объявить функцию business
без платы за производительность использования udf
, позволяя переписать приведенный выше код как:
SELECT
business(person.name),
business(person.some_information),
business(person.some_other_information)
...
FROM person
Я довольно много поискал в документации по искрам и на этом веб-сайте и не нашел способа добиться этого, что довольно странно для меня, потому что это выглядит довольно естественной потребностью, и я не понимаю, почему вы должны обязательно заплатить цену черного ящика за определение и вызов udf.