Sparksql的UDF(自定義函數)---完成你實現不了sql語句(初篇一)


  • 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的應用分兩步
  1. 注冊

調用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)
  1. 使用

使用自定義的函數很簡單,看成一個自帶的函數即可,代碼實例如下

DataFrame result01 = jscsql.sql("select concat_odso(t.mdn,t.mdn) from data_evdo t where t.bsid='374E00000BA1'");

  

concat_odso即為自定義的函數名字,該定義函數實現了查詢結果字符串的拼接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM