Udostępnij za pośrednictwem


Integracja z funkcjami UDF, UDAF i UDTF programu Hive

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks Runtime

Usługa Spark SQL obsługuje integrację funkcji zdefiniowanych przez użytkownika (UDF), funkcji agregujących zdefiniowanych przez użytkownika (UDAF) oraz funkcji tabelarycznych zdefiniowanych przez użytkownika (UDTF) programu Hive. Podobnie jak funkcje UDF i UDAF w Spark, funkcje UDF w Hive działają na jednym wierszu jako dane wejściowe i generują pojedynczy wiersz jako dane wyjściowe, podczas gdy funkcje UDAF w Hive działają na wielu wierszach i zwracają pojedynczy zagregowany wiersz jako wynik. Ponadto Hive obsługuje również funkcje tabelarne zdefiniowane przez użytkownika (UDTF), które przyjmują jeden wiersz jako dane wejściowe i zwracają wiele wierszy jako dane wyjściowe. Aby używać funkcji UDF/UDAFs/UTFs programu Hive, użytkownik powinien zarejestrować je na platformie Spark, a następnie użyć ich w zapytaniach Spark SQL.

Przykłady

Hive ma dwa interfejsy UDF: UDF i GenericUDF. W poniższym przykładzie użyto GenericUDFAbs pochodzącego z GenericUDF.

-- 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|
+--------------+

W poniższym przykładzie użyto metody GenericUDTFExplode pochodzącej z pliku GenericUDTF.

-- 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 ma dwa interfejsy UDAF: UDAF i GenericUDAFResolver. W poniższym przykładzie użyto metody GenericUDAFSum pochodzącej z klasy GenericUDAFResolver.

-- 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|
+---+---------------+