1. 概述
1.1 版本
FineDataLink 版本 | 功能说明 |
---|---|
4.2.9.1 | 支持使用通过接口开发的 SparkSQL 自定义函数插件 |
1.2 应用场景
Spark SQL 算子中已经内置了大量函数,能够满足用户的基本需求。但在一些特殊场景,可能需要一些特殊的函数。在这种情况下,FineDataLink 支持自定义函数,可以有用户根据业务需要自己来定义一些函数。
1.3 注意事项
1)插件开发阶段:
不能使用静态方法,要使用类方法;
需要避免函数同名,同名函数只会生效一个;
2)插件更新阶段:spark 运行过程中不支持热更新 class,因此更新插件后需要重启 FineDataLink。
2. 示例
在开发插件之前,请自行准备编译环境,如 Eclipse 或 Idea 。
用户可参考 示例插件 ,基于实际需求开发插件。
2.1 编写 Java 文件
编写 java 文件,无参数函数示例如下:
package com.fr.plugin.dp.spark.udf.demo;
import com.fr.dp.spark.udf.SparkUDFPluginSign;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;
public class Demo0SparkUDFPluginSign implements SparkUDFPluginSign<String> {
public static final Demo0SparkUDFPluginSign KEY = new Demo0SparkUDFPluginSign();
@Override
public String functionName() {
return "demoZero";
}//自定义函数名
@Override
public String[] params() {
return new String[0];
}//参数名,本示例中无参数
@Override
public DataType returnType() {
return DataTypes.StringType;
}//函数返回值类型,一般为 String
@Override
public String run(Object... params) throws Exception {
return "111";
}//自定义函数逻辑
}
有参数函数示例如下:
package com.fr.plugin.dp.spark.udf.demo;
import com.fr.dp.spark.udf.SparkUDFPluginSign;
import org.apache.spark.sql.types.DataType;
import org.apache.spark.sql.types.DataTypes;
public class Demo2SparkUDFPluginSign implements SparkUDFPluginSign<String> {
public static final Demo2SparkUDFPluginSign KEY = new Demo2SparkUDFPluginSign();
@Override
public String functionName() {
return "demoTwo";
}//自定义函数名
@Override
public String[] params() {
return new String[]{"expr", "len"};
}//自定义参数名
@Override
public DataType returnType() {
return DataTypes.StringType;
}//函数返回值类型,一般为 String
@Override
public String run(Object... params) throws Exception {
return ((String) params[0]).substring((Integer) params[1]);
}//参数在函数逻辑中的使用方法
}
2.2 安装插件
自定义函数插件开发完成后,在「管理系统>插件管理」中安装自定义函数插件。详情参见文档:插件管理
2.3 使用自定义函数
在 Spark SQL 算子中,自定义函数会加上标签,使用时需加「plugin_」前缀。例如,2.1 节自定义 demoZero 函数,实际使用时为 plugin_demoZero() 。