1. 概述
1.1 版本
| FineDataLink 版本 | 功能說明 |
|---|---|
| 4.2.9.1 | 支援使用透過API開發的 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() 。

