最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)而無需自己去通過編程來實(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)文章

  • 使用JMX連接JVM實(shí)現(xiàn)過程詳解

    使用JMX連接JVM實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了使用JMX連接JVM實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java使用ArrayList實(shí)現(xiàn)撲克牌的示例代碼

    Java使用ArrayList實(shí)現(xiàn)撲克牌的示例代碼

    學(xué)習(xí)了關(guān)于集合類的知識,我們可以做一個小項目來加深對集合類知識的學(xué)習(xí)!本文就來利用ArrayList實(shí)現(xiàn)撲克牌發(fā)牌洗牌效果,需要的可以參考一下
    2022-10-10
  • 關(guān)于idea中SpringBoot啟動失敗的坑

    關(guān)于idea中SpringBoot啟動失敗的坑

    這篇文章主要介紹了關(guān)于idea中SpringBoot啟動失敗的坑,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • MyBatis Generator介紹及使用方法

    MyBatis Generator介紹及使用方法

    MyBatis Generator 是一款針對 MyBatis 或 iBATIS 設(shè)計的代碼生成器,由 MyBatis 官方提供,這篇文章主要介紹了MyBatis Generator介紹及使用方法,需要的朋友可以參考下
    2023-06-06
  • java字符串格式化(String類format方法)

    java字符串格式化(String類format方法)

    這篇文章主要介紹了java字符串格式化(String類format方法),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 關(guān)于Spring的統(tǒng)一功能處理(攔截器)實(shí)現(xiàn)

    關(guān)于Spring的統(tǒng)一功能處理(攔截器)實(shí)現(xiàn)

    這篇文章主要介紹了關(guān)于Spring的統(tǒng)一功能處理(攔截器)實(shí)現(xiàn),每個方法中都要單獨(dú)寫用戶登錄驗證的方法,即使封裝成公共方法,也一樣要傳參調(diào)用和在方法中進(jìn)行判斷,需要的朋友可以參考下
    2023-05-05
  • Maven中<distributionManagement>的使用及說明

    Maven中<distributionManagement>的使用及說明

    本文主要介紹了Maven中的SNAPSHOT和RELEASE倉庫的區(qū)別,以及如何在POM文件中配置和使用快照版本,快照版本可以實(shí)現(xiàn)實(shí)時更新,方便開發(fā)過程中的依賴管理,同時,本文還總結(jié)了Maven的一些常用命令及其作用
    2025-01-01
  • Java?OpenCV圖像處理之SIFT角點(diǎn)檢測詳解

    Java?OpenCV圖像處理之SIFT角點(diǎn)檢測詳解

    SIFT,即尺度不變特征變換,是用于圖像處理領(lǐng)域的一種描述。這種描述具有尺度不變性,可在圖像中檢測出關(guān)鍵點(diǎn),是一種局部特征描述子。本文將詳細(xì)介紹一下Java?OpenCV圖像處理中的SIFT角點(diǎn)檢測,需要的可以參考一下
    2022-02-02
  • IntelliJ IDEA修改內(nèi)存大小,使得idea運(yùn)行更流暢

    IntelliJ IDEA修改內(nèi)存大小,使得idea運(yùn)行更流暢

    今天小編就為大家分享一篇關(guān)于IntelliJ IDEA修改內(nèi)存大小,使得idea運(yùn)行更流暢的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 解決Mybatis-plus自定義TypeHandler查詢映射結(jié)果一直為null問題

    解決Mybatis-plus自定義TypeHandler查詢映射結(jié)果一直為null問題

    這篇文章主要介紹了解決Mybatis-plus自定義TypeHandler查詢映射結(jié)果一直為null問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

交口县| 仁化县| 怀化市| 祁门县| 安远县| 资溪县| 平阳县| 尤溪县| 凌源市| 天全县| 长沙市| 望都县| 简阳市| 台南县| 临安市| 广安市| 云林县| 江都市| 奎屯市| 金湖县| 龙门县| 电白县| 德格县| 丹凤县| 白沙| 白山市| 鲁山县| 四会市| 霍山县| 阳信县| 延津县| 阿拉善左旗| 宜都市| 锡林浩特市| 大连市| 永定县| 个旧市| 明光市| 兴业县| 隆化县| 密云县|