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

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

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

Spark_SQL的UDF使用

用戶自定義函數(shù),也叫UDF,可以讓我們使用Python/Java/Scala注冊自定義函數(shù),并在SQL中調(diào)用。這種方法很常用,通常用來給機構(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)建的方法傳遞進來,非常便捷地注冊我們自己的UDF。
  • 在Scala和Python中,可以利用語言原生的函數(shù)和lambda語法的支持,而在Java中,則需要擴展對應的UDF類。UDF能夠支持各種數(shù)據(jù)類型,返回類型也可以與調(diào)用時的參數(shù)類型完全不一樣。

UDF簡單使用

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

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")

應用 UDF

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

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

相關文章

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

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

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

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

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

    關于idea中SpringBoot啟動失敗的坑

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

    MyBatis Generator介紹及使用方法

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

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

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

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

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

    Maven中<distributionManagement>的使用及說明

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

    Java?OpenCV圖像處理之SIFT角點檢測詳解

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

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

    今天小編就為大家分享一篇關于IntelliJ IDEA修改內(nèi)存大小,使得idea運行更流暢的文章,小編覺得內(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

最新評論

舞阳县| 顺义区| 惠安县| 杭锦旗| 江永县| 泰州市| 德兴市| 浦县| 法库县| 三门峡市| 赞皇县| 东辽县| 宜城市| 乌苏市| 巩留县| 昭通市| 凯里市| 改则县| 惠水县| 贺州市| 泽库县| 肥城市| 新民市| 满城县| 庆城县| 德阳市| 舞钢市| 沙坪坝区| 江北区| 南京市| 五常市| 伊宁市| 上思县| 朝阳县| 西藏| 雷波县| 常山县| 原平市| 隆回县| 资中县| 罗田县|