sparkSQL中udf的使用


Spark中使用sql時一些功能需要自定義方法實現,這時候就可以使用UDF功能來實現

多參數支持

UDF不支持參數*的方式輸入多個參數,例如String*,不過可以使用array來解決這個問題。

定義udf方法,此處功能是將多個字段合並為一個字段

 

def allInOne(seq: Seq[Any], sep: String): String = seq.mkString(sep)

 

 

在sql中使用

 

sqlContext.udf.register("allInOne", allInOne _)

//col1,col2,col3三個字段合並,使用','分割
val sql =
"""
  |select allInOne(array(col1,col2,col3),",") as col
  |from tableName
""".stripMargin
sqlContext.sql(sql).show()

 

 

在DataFrame中使用

 

import org.apache.spark.sql.functions.{udf,array,lit}
val myFunc = udf(allInOne _)
val cols = array("col1","col2","col3")
val sep = lit(",")
df.select(myFunc(cols,sep).alias("col")).show()


免責聲明!

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



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