- UDF
User Define Function, 用戶自定義函數,簡稱UDF,存在與很多組件中
- 現在由於項目的需要,開始引用Spark技術,其中的SparkSql組件是其核心組件之一,在Spark1.1版本的時候,Spark推出了Uer Define Function功能,用戶可以在Spark SQL 里自定義實際需要的UDF來處理數據
- 相信在使用Sparksql的人都遇到了Sparksql所支持的函數太少了的難處,除了最基本的函數,Sparksql所能支撐的函數很少,肯定不能滿足正常的項目使用,UDF可以解決問題
- 廢話不多說,本篇講解如何在java ide中最簡單實現udf,更詳細的說明等研究透了些再寫寫(基於Java的代碼實現介紹)
- SparkSql的應用分兩步
- 注冊
調用API的是SQLContext
JavaSparkContext jsc = new JavaSparkContext(sparkconf); SQLContext jscsql = new SQLContext(jsc);
jscsql 就可以直接調用API方法了
代碼實例:
JavaSparkContext jsc = new JavaSparkContext(sparkconf); SQLContext jscsql = new SQLContext(jsc); jscsql.udf().register("concat_odso",new UDF2<String,String,String>(){ public String call(String arg1, String arg2) { return arg2 + arg1; }},DataTypes.StringType);
SQLContext.udf().register(string name,Function)的聲明注冊模式
Function可以使用UDF1到UDF22/21?,所表達的意思就是幾個參數,2代指兩個入參,10代指10個入參
return返回的即為UDF<>的最后一個參數,
DataTypes.StringType用於表名返回的格式
DataTypes.StringType/BooleanType/....等等格式
注意要引用的包
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.api.java.UDFX;
- 注冊完成后,就會自定義一個函數,函數的名字即為你的
register的第一個參數(string name)
- 使用
使用自定義的函數很簡單,看成一個自帶的函數即可,代碼實例如下
DataFrame result01 = jscsql.sql("select concat_odso(t.mdn,t.mdn) from data_evdo t where t.bsid='374E00000BA1'");
concat_odso即為自定義的函數名字,該定義函數實現了查詢結果字符串的拼接