與 Hive UDF、UDAF 和 UDTF 整合
適用於: Databricks Runtime
Spark SQL 支援整合 Hive UDF、UDAF 和 UDDF。 與 Spark UDF 和 UDAF 類似,Hive UDF 會以單一數據列作為輸入運作,併產生單一數據列做為輸出,而 Hive UDAF 則會在多個數據列上運作,並傳回單一匯總數據列的結果。 此外,Hive 也支援 UDDF (使用者定義表格式函式)以一個數據列作為輸入,並傳回多個數據列做為輸出。 若要使用Hive UDF/UDAFs/UTF,用戶應該在Spark中註冊它們,然後在Spark SQL查詢中使用它們。
範例
Hive 有兩個 UDF 介面: UDF 和 GenericUDF。
下列範例使用衍生自 GenericUDF
的 GenericUDFAbs。
-- Register `GenericUDFAbs` and use it in Spark SQL.
-- Note that, if you use your own programmed one, you need to add a JAR containing it
-- into a classpath,
-- e.g., ADD JAR yourHiveUDF.jar;
CREATE TEMPORARY FUNCTION testUDF AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDFAbs';
SELECT * FROM t;
+-----+
|value|
+-----+
| -1.0|
| 2.0|
| -3.0|
+-----+
SELECT testUDF(value) FROM t;
+--------------+
|testUDF(value)|
+--------------+
| 1.0|
| 2.0|
| 3.0|
+--------------+
下列範例使用衍生自 GenericUDTF 的 GenericUDTFExplode。
-- Register `GenericUDTFExplode` and use it in Spark SQL
CREATE TEMPORARY FUNCTION hiveUDTF
AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDTFExplode';
SELECT * FROM t;
+------+
| value|
+------+
|[1, 2]|
|[3, 4]|
+------+
SELECT hiveUDTF(value) FROM t;
+---+
|col|
+---+
| 1|
| 2|
| 3|
| 4|
+---+
Hive 有兩個 UDAF 介面: UDAF 和 GenericUDAFResolver。
下列範例使用衍生自 GenericUDAFResolver
的 GenericUDAFSum。
-- Register `GenericUDAFSum` and use it in Spark SQL
CREATE TEMPORARY FUNCTION hiveUDAF
AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDAFSum';
SELECT * FROM t;
+---+-----+
|key|value|
+---+-----+
| a| 1|
| a| 2|
| b| 3|
+---+-----+
SELECT key, hiveUDAF(value) FROM t GROUP BY key;
+---+---------------+
|key|hiveUDAF(value)|
+---+---------------+
| b| 3|
| a| 3|
+---+---------------+