Spark:用戶自定義函數(UDF)使用


Spark SQL支持用戶自定義函數(UDF),我們可以方便的利用udf函數來完成各種數據處理操作。

下面例子展示了用UDF功能對一個數據集進行轉換操作(將輸入df的某列進行處理,將處理結果作為新列附加在新生成的df上):

var in = spark.createDataset(List(
  (1, 2),
  (3, 2),
  (3, 4),
  (3, 4),
  (1, 2)))
  .toDF("a", "b")
in.show
/* +---+---+ | a| b| +---+---+ | 1| 2| | 3| 2| | 3| 4| | 3| 4| | 1| 2| +---+---+ */
val df = in.groupBy("a")
  .agg(collect_list("b").as("b"))
df.show
/* +---+---------+ | a| b| +---+---------+ | 1| [2, 2]| | 3|[2, 4, 4]| +---+---------+ */

def f(arr: Seq[Int]) = {
  (arr.sum * 1.0) / arr.size
} //自定義一個功能函數
val my_udf = udf(f _) //將自定義函數注冊為udf
val out = df.withColumn("avg(b)", my_udf($"b")) //使用udf進行轉換操作
out.show
/* +---+---------+------------------+ | a| b| avg(b)| +---+---------+------------------+ | 1| [2, 2]| 2.0| | 3|[2, 4, 4]|3.3333333333333335| +---+---------+------------------+ */


免責聲明!

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



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