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

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

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

Spark_SQL的UDF使用

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

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

UDF簡(jiǎn)單使用

首先通過(guò)代碼建立一個(gè)測(cè)試的DataFrame數(shù)據(jù),通過(guò)RDD產(chǎn)生,再轉(zhuǎn)換成DataFrame格式,通過(guò)寫簡(jiǎn)單的UDF函數(shù),對(duì)數(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}
// 通過(guò)RDD創(chuàng)建測(cè)試數(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) 
// 注冊(cè)UDF函數(shù)    
spark.udf.register("strlen",(x:String)=>x.length)
// 創(chuàng)建臨時(shí)表       
peopleDF.registerTempTable("people")                  
// 選擇輸出語(yǔ)句,(選擇輸出列:名字,名字長(zhǎng)度,性別從表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]

注冊(cè) 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)建臨時(shí)表

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)容請(qǐng)搜索腳本之家以前的文章或繼續(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()方法用于多個(gè)線程之間的協(xié)作和通信,而sleep()方法用于線程的休眠,需要的朋友可以參考下
    2024-07-07
  • 字節(jié)二面SpringBoot可以同時(shí)處理多少請(qǐng)求

    字節(jié)二面SpringBoot可以同時(shí)處理多少請(qǐng)求

    這篇文章主要為大家介紹了字節(jié)二面之SpringBoot可以同時(shí)處理多少請(qǐng)求面試分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(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 日志過(guò)濾器,輸出dubbo 接口調(diào)用入?yún)?、出參等信?最新推薦)

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

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

    Spring(二):Spring通過(guò)IOC來(lái)創(chuàng)建對(duì)象

    下面小編就為大家?guī)?lái)一篇詳談Spring對(duì)IOC的理解(推薦篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-07-07
  • Java別說(shuō)取余(%)運(yùn)算簡(jiǎn)單你真的會(huì)嗎

    Java別說(shuō)取余(%)運(yùn)算簡(jiǎn)單你真的會(huì)嗎

    這篇文章主要介紹了Java別說(shuō)取余(%)運(yùn)算簡(jiǎn)單你真的會(huì)嗎,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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)換異常解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 新手了解java 數(shù)組基礎(chǔ)知識(shí)

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

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

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

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

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

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

最新評(píng)論