欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spark SQL的自定義函數(shù)UDF使用

 更新時間:2023年02月01日 14:36:59   作者:CarveStone  
Spark Sql可以通過UDF來對DataFrame的Column進(jìn)行自定義操作。在特定場景下定義UDF可能需要用到Spark Context以外的資源或數(shù)據(jù)。比如從List或Map中取值,或是通過連接池從外部的數(shù)據(jù)源中讀取數(shù)據(jù),然后再參與Column的運(yùn)算

Spark_SQL的UDF使用

用戶自定義函數(shù),也叫UDF,可以讓我們使用Python/Java/Scala注冊自定義函數(shù),并在SQL中調(diào)用。這種方法很常用,通常用來給機(jī)構(gòu)內(nèi)的SQL用戶們提供高級功能支持,這樣這些用戶就可以直接調(diào)用注冊的函數(shù)而無需自己去通過編程來實現(xiàn)了。

  • 在Spark SQL中,編寫UDF 尤為簡單。Spark SQL不僅有自己的UDF接口,也支持已有的Apache Hive UDF。我們可以使用Spark支持的編程語言編寫好函數(shù),然后通過Spark SQL內(nèi)建的方法傳遞進(jìn)來,非常便捷地注冊我們自己的UDF。
  • 在Scala和Python中,可以利用語言原生的函數(shù)和lambda語法的支持,而在Java中,則需要擴(kuò)展對應(yīng)的UDF類。UDF能夠支持各種數(shù)據(jù)類型,返回類型也可以與調(diào)用時的參數(shù)類型完全不一樣。

UDF簡單使用

首先通過代碼建立一個測試的DataFrame數(shù)據(jù),通過RDD產(chǎn)生,再轉(zhuǎn)換成DataFrame格式,通過寫簡單的UDF函數(shù),對數(shù)據(jù)進(jìn)行操作并輸出,例如:

import org.apache.spark.sql.Row
import org.apache.spark.rdd._
import scala.collection.mutable.ArrayBuffer
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType}
// 通過RDD創(chuàng)建測試數(shù)據(jù)
val rdd: RDD[Row] = sc.parallelize(List("Michael,male, 29",            
"Andy,female, 30",
"Justin,male, 19",
"Dela,female, 25",
"Magi,male, 20",
"Pule,male,21"))
.map(_.split(",")).map(p => Row(p(0),p(1),p(2).trim.toInt))
// 創(chuàng)建Schema
val schema = StructType( Array( StructField("name",StringType, true),StructField("sex",StringType, true),StructField("age",IntegerType,true)))
// 轉(zhuǎn)換DataFrame  
val peopleDF = spark.sqlContext.createDataFrame(rdd,schema) 
// 注冊UDF函數(shù)    
spark.udf.register("strlen",(x:String)=>x.length)
// 創(chuàng)建臨時表       
peopleDF.registerTempTable("people")                  
// 選擇輸出語句,(選擇輸出列:名字,名字長度,性別從表people中)
spark.sql("select name, strlen(name) as strlen,sex from people").show()

創(chuàng)建 DataFrame

scala> val df = spark.read.json("data/user.json")
df: org.apache.spark.sql.DataFrame = [age: bigint, username: string]

注冊 UDF

scala> spark.udf.register("addName",(x:String)=> "Name:"+x)
res9: org.apache.spark.sql.expressions.UserDefinedFunction = 
UserDefinedFunction(<function1>,StringType,Some(List(StringType)))

創(chuàng)建臨時表

scala> df.createOrReplaceTempView("people")

應(yīng)用 UDF

scala> spark.sql("Select addName(name),age from people").show()

到此這篇關(guān)于Spark SQL的自定義函數(shù)UDF使用的文章就介紹到這了,更多相關(guān)Spark SQL UDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java面試題篇之Sleep()方法與Wait()方法的區(qū)別詳解

    Java面試題篇之Sleep()方法與Wait()方法的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于Java面試題篇之Sleep()方法與Wait()方法區(qū)別的相關(guān)資料,wait()是Object類中的方法,而sleep()是Thread類中的靜態(tài)方法,wait()方法用于多個線程之間的協(xié)作和通信,而sleep()方法用于線程的休眠,需要的朋友可以參考下
    2024-07-07
  • 字節(jié)二面SpringBoot可以同時處理多少請求

    字節(jié)二面SpringBoot可以同時處理多少請求

    這篇文章主要為大家介紹了字節(jié)二面之SpringBoot可以同時處理多少請求面試分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)

    shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)

    這篇文章主要為大家介紹了shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?最新推薦)

    DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?最新推薦)

    這篇文章主要介紹了DUBBO 日志過濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?首先自定義一個過濾器?DubboLoggerFilter.java,本文結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Spring(二):Spring通過IOC來創(chuàng)建對象

    Spring(二):Spring通過IOC來創(chuàng)建對象

    下面小編就為大家?guī)硪黄斦凷pring對IOC的理解(推薦篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-07-07
  • Java別說取余(%)運(yùn)算簡單你真的會嗎

    Java別說取余(%)運(yùn)算簡單你真的會嗎

    這篇文章主要介紹了Java別說取余(%)運(yùn)算簡單你真的會嗎,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • java.lang.Long cannot be cast to java.lang.Integer數(shù)據(jù)類型轉(zhuǎn)換異常解決辦法

    java.lang.Long cannot be cast to ja

    本文主要介紹了java.lang.Long cannot be cast to java.lang.Integer數(shù)據(jù)類型轉(zhuǎn)換異常解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 新手了解java 數(shù)組基礎(chǔ)知識

    新手了解java 數(shù)組基礎(chǔ)知識

    這篇文章主要介紹了Java 數(shù)組分析及簡單實例的相關(guān)資料,在Java中它就是對象,一個比較特殊的對象,需要的朋友可以參考下,希望可以對你有所幫助
    2021-07-07
  • java實現(xiàn)AES 32位加密解密的方案

    java實現(xiàn)AES 32位加密解密的方案

    Oracle在其官方網(wǎng)站上提供了無政策限制權(quán)限文件(Unlimited Strength Jurisdiction Policy Files),我們只需要將其部署在JRE環(huán)境中,就可以解決限制問題,下面給大家介紹下java實現(xiàn)AES 32位加密解密的方案,感興趣的朋友一起看看吧
    2021-11-11
  • Java中的super關(guān)鍵字_動力節(jié)點Java學(xué)院整理

    Java中的super關(guān)鍵字_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了Java中的super關(guān)鍵字的相關(guān)知識,需要的朋友參考下
    2017-04-04

最新評論