描述
CREATE FUNCTION 语句用于在 Spark 中创建临时或永久函数。临时函数的作用域在会话级别,而永久函数创建在持久化目录中,可供所有会话使用。USING 子句中指定的资源在首次执行时会提供给所有执行器。除了 SQL 接口外,Spark 还允许用户使用 Scala、Python 和 Java API 创建自定义的标量和聚合函数。语法
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]function_name AS class_name [ resource_locations ]
参数
参数 | 说明 | 语法 |
OR REPLACE | 如果指定,将重新加载函数的资源。用于获取对函数实现所做的更改。此参数与 IF NOT EXISTS 互斥,不能同时指定 | - |
TEMPORARY | 指示创建的函数作用域为当前会话级别,会话结束即失效。不会在目录中创建持久条目 | - |
IF NOT EXISTS | 仅在函数不存在时创建;若已存在则跳过且不报错。此参数与 OR REPLACE 互斥 | - |
function_name | 指定要创建的函数名称,可选择性地用数据库名限定 | [ database_name. ] function_name |
class_name | 指定提供函数实现的类名,需扩展以下基类之一: • org.apache.hadoop.hive.ql.exec.UDF / UDAF• org.apache.hadoop.hive.ql.udf.generic.AbstractGenericUDAFResolver / GenericUDF / GenericUDTF• org.apache.spark.sql.expressions.UserDefinedAggregateFunction | - |
resource_locations | 包含函数实现及其依赖项的资源列表 | USING { { (JAR | FILE | ARCHIVE) resource_uri } , ... } |
示例
-- 创建测试表CREATE EXTERNAL TABLE func_test_table (c1 INT)USING PARQUET LOCATION 'cosn://kevin-1344200066/test_create_function/func_test_table';INSERT INTO func_test_table VALUES (1), (2), (3);-- 注册 Python UDF 并使用(通过 Spark API)-- spark.udf.register("py_add_ten", udf(lambda x: x + 10, IntegerType()))SELECT py_add_ten(c1) AS result FROM func_test_table;-- 创建临时函数CREATE TEMPORARY FUNCTION temp_avg AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDAFAverage';-- 查看函数SHOW USER FUNCTIONS;SHOW FUNCTIONS;-- 删除临时函数DROP TEMPORARY FUNCTION IF EXISTS temp_avg;-- CREATE OR REPLACECREATE OR REPLACE TEMPORARY FUNCTION temp_avg2 AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDAFAverage';SELECT temp_avg2(c1) FROM func_test_table;