用戶定義聚合函數- Scala

本文包含一個UDAF示例,以及如何注冊它以便在Apache Spark SQL中使用。看到用戶定義聚合函數(UDAFs)為更多的細節。

實現一個UserDefinedAggregateFunction

進口orgapache火花sql表達式MutableAggregationBuffer進口orgapache火花sql表達式UserDefinedAggregateFunction進口orgapache火花sql進口orgapache火花sql類型_GeometricMean擴展UserDefinedAggregateFunction//這是聚合函數的輸入字段。覆蓋definputSchemaorgapache火花sql類型StructTypeStructTypeStructField“價值”倍增式:://這是用於計算聚合的內部字段。覆蓋defbufferSchemaStructTypeStructTypeStructField“數”LongType::StructField“產品”倍增式:://這是聚合函數的輸出類型。覆蓋def數據類型數據類型倍增式覆蓋def確定的布爾真正的//這是緩衝區模式的初始值。覆蓋def初始化緩衝MutableAggregationBuffer):單位緩衝00 l緩衝11.0這是如何更新你的緩衝區模式給定的輸入。覆蓋def更新緩衝MutableAggregationBuffer輸入):單位緩衝0緩衝木屐](0+1緩衝1緩衝木屐](1輸入木屐](0這是如何合並兩個bufferSchema類型的對象。覆蓋def合並buffer1MutableAggregationBufferbuffer2):單位buffer10buffer1木屐](0+buffer2木屐](0buffer11buffer1木屐](1buffer2木屐](1//在給定bufferSchema的最終值的情況下,在這裏輸出最終值。覆蓋def評估緩衝):任何數學戰俘緩衝1),1toDouble/緩衝getLong0))

使用Spark SQL注冊UDAF

火花udf注冊“通用汽車”GeometricMean

用你UDAF

//創建DataFrame和Spark SQL表進口orgapache火花sql功能_瓦爾id火花範圍120.idcreateOrReplaceTempView“id”瓦爾df火花sql"select id, id % 3 as group_id from ids"dfcreateOrReplaceTempView“簡單”
——使用group_by語句並調用UDAF。選擇group_id通用汽車id簡單的集團通過group_id
//或者使用DataFrame語法調用聚合函數。//創建UDAF GeometricMean實例。瓦爾通用汽車GeometricMean//顯示列id值的幾何平均值。dfgroupBy“group_id”).gg通用汽車上校“id”))。作為“GeometricMean”))。顯示()//通過指定的名稱調用UDAF。dfgroupBy“group_id”).ggexpr“通用汽車(id) GeometricMean”))。顯示()