创建函数

描述

CREATE FUNCTION 语句用于在Spark中创建临时或永久函数。临时函数的作用域是会话级别,而永久函数是在持久目录中创建的,供所有会话使用。在第一次执行时, USING 子句中指定的资源对所有执行器可用。除了SQL接口外,Spark允许用户使用Scala、Python和Java API创建自定义用户定义的标量和聚合函数。有关更多信息,请参见 标量UDFs UDAFs

语法

创建 [  替换 ] [ 临时 ] 函数 [ 如果 不存在  ]
function_name 作为 class_name [ resource_locations ]

参数

示例

-- 1. 创建一个简单的 UDF `SimpleUdf`,将提供的整数值增加 10。
--    import org.apache.hadoop.hive.ql.exec.UDF;
--    public class SimpleUdf extends UDF {
--      public int evaluate(int value) {
--        return value + 10;
--      }
--    }
-- 2. 编译并将其放入一个名为 `SimpleUdf.jar` 的 JAR 文件中,路径为 /tmp。
-- 创建一个名为 `test` 的表并插入两行数据。
CREATE TABLE test(c1 INT);
INSERT INTO test VALUES (1), (2);
-- 创建一个永久函数,名为 `simple_udf`。
CREATE FUNCTION simple_udf AS 'SimpleUdf'
USING JAR '/tmp/SimpleUdf.jar';
-- 验证该函数是否在注册表中。
SHOW USER FUNCTIONS;
+------------------+
| function|
+------------------+
|default.simple_udf|
+------------------+
-- 调用该函数。每个选定的值应增加 10。
SELECT simple_udf(c1) AS function_return_value FROM test;
+---------------------+
|function_return_value|
+---------------------+
| 11|
| 12|
+---------------------+
-- 创建一个临时函数。
CREATE TEMPORARY FUNCTION simple_temp_udf AS 'SimpleUdf'
USING JAR '/tmp/SimpleUdf.jar';
-- 验证新创建的临时函数是否在注册表中。
-- 请注意,临时函数没有与之关联的合格
-- 数据库。
SHOW USER FUNCTIONS;
+------------------+
| function|
+------------------+
|default.simple_udf|
| simple_temp_udf|
+------------------+
-- 1. 修改 `SimpleUdf` 的实现,将提供的整数值增加 20。
--    import org.apache.hadoop.hive.ql.exec.UDF;
--    public class SimpleUdfR extends UDF {
--      public int evaluate(int value) {
--        return value + 20;
--      }
--    }
-- 2. 编译并将其放入一个名为 `SimpleUdfR.jar` 的 JAR 文件中,路径为 /tmp。
-- 替换 `simple_udf` 的实现
CREATE OR REPLACE FUNCTION simple_udf AS 'SimpleUdfR'
USING JAR '/tmp/SimpleUdfR.jar';
-- 调用该函数。每个选定的值应增加 20。
SELECT simple_udf(c1) AS function_return_value FROM test;
+---------------------+
|function_return_value|
+---------------------+
| 21|
| 22|
+---------------------+