SparkSQL — можете ли вы создавать UDFs (Пользовательские функции)?

#apache-spark #apache-spark-sql #user-defined-functions #databricks

Вопрос:

В документации я вижу упоминание о пользовательских функциях: https://spark.apache.org/docs/latest/sql-ref-functions-udf-scalar.html

Но это показывает примеры Java и Scala.

Я говорю о коде Spark SQL, подобном приведенному ниже. Можно ли для этого определить и использовать UDFS?

 %sql
CREATE TABLE bla USING PARQUET AS
  SELECT *
  FROM jaja.haha AS haha
 

Я не понимаю, почему в руководстве говорится о ссылке на SQL, а затем переходит к показу кода, отличного от SQL.

Комментарии:

1. Afaik вы определяете и регистрируете их для каждой кодировки (java, scala, ..) и вызываете их с помощью Spark SQL, но вы не определяете их с помощью Spark SQL.

Ответ №1:

Начиная с Databricks Runtime 9.0, можно определить скалярную определяемую пользователем функцию, используя синтаксис только для SQL (пример из примечаний к выпуску):

 CREATE FUNCTION square(x DOUBLE) RETURNS DOUBLE RETURN x * x;
 

Обратитесь к документации для синтаксиса и других примеров.

Ответ №2:

Вы можете сделать это с помощью CREATE FUNCTION .

 CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]
    function_name AS class_name [ resource_locations ]
 

Прочитайте статью databricks здесь.

Комментарии:

1. это не определяет функцию SQL — вам все равно нужен скомпилированный код