1. 程式人生 > >SparkSQL 使用者自定義函式(UDF、UDAF、開窗)

SparkSQL 使用者自定義函式(UDF、UDAF、開窗)

UDF: 操作單個數據行,產生單個數據行; UDAF: 操作多個數據行,產生一個數據行。 UDTF: 操作一個數據行,產生多個數據行一個表作為輸出。

UDF函式 通過spark.udf.register(“funcName”, func) 來進行註冊 使用:select funcName(name) from people 來直接使用

開窗函式

over()開窗函式: 在使用聚合函式後,會將多行變成一行,而開窗函式是將一行變成多行;並且在使用聚合函式後,如果要顯示其他的列必須將列加入到group by中,而使用開窗函式後,可以不使用group by,直接將所有資訊顯示出來。 開窗函式適用於在每一行的最後一列新增聚合函式的結果。 常用開窗函式: 1.為每條資料顯示聚合資訊.(聚合函式() over()) 2.為每條資料提供分組的聚合函式結果(聚合函式() over(partition by 欄位) as 別名) –按照欄位分組,分組後進行計算 3.與排名函式一起使用(row number() over(order by 欄位) as 別名)

常用分析函式:(最常用的應該是1.2.3 的排序) 1、row_number() over(partition by … order by …) 2、rank() over(partition by … order by …) 3、dense_rank() over(partition by … order by …) 在這裡插入圖片描述 4、count() over(partition by … order by …) 5、max() over(partition by … order by …) 6、min() over(partition by … order by …) 7、sum() over(partition by … order by …) 8、avg() over(partition by … order by …) 9、first_value() over(partition by … order by …) 10、last_value() over(partition by … order by …) 11、lag() over(partition by … order by …) 12、lead() over(partition by … order by …) lag 和lead 可以 獲取結果集中,按一定排序所排列的當前行的上下相鄰若干offset 的某個行的某個列(不用結果集的自關聯); lag ,lead 分別是向前,向後; lag 和lead 有三個引數,第一個引數是列名,第二個引數是偏移的offset,第三個引數是 超出記錄視窗時的預設值