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 programu Hive, funkcji UDAFs i funkcji zdefiniowanych przez użytkownika. Podobnie jak funkcje zdefiniowane przez użytkownika platformy Spark i funkcje UDF platformy Hive działają w jednym wierszu jako dane wejściowe i generują pojedynczy wiersz jako dane wyjściowe, podczas gdy funkcje UDAFs programu Hive działają na wielu wierszach i zwracają jeden zagregowany wiersz w wyniku. Ponadto hive obsługuje również funkcje zdefiniowane przez użytkownika (funkcje tabelaryczne zdefiniowane przez użytkownika), które działają w jednym wierszu 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 typów GenericUDFAbs pochodzących z klasy 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|
+---+---------------+