CREATE FUNCTION

最近更新时间:2026-05-20 14:11:22

我的收藏

描述

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 REPLACE
CREATE OR REPLACE TEMPORARY FUNCTION temp_avg2 AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDAFAverage';
SELECT temp_avg2(c1) FROM func_test_table;