Spark SQL unterstützt die Integration von Hive-UDFs, -UDAFs und -UDTFs. Ähnlich wie Spark-UDFs und -UDAFs arbeiten Hive-UDFs mit einer einzelnen Zeile als Eingabe und generieren eine einzelne Zeile als Ausgabe, während Hive-UDAFs mit mehreren Zeilen arbeiten und eine einzelne aggregierte Zeile als Ergebnis zurückgeben. Darüber hinaus unterstützt Hive auch UDTFs (User Defined Tabular Functions, benutzerdefinierte Tabellenfunktionen), die auf eine Zeile als Eingabe angewendet werden und mehrere Zeilen als Ausgabe zurückgeben. Um Hive-UDFs/-UDAFs/-UTFs verwenden zu können, muss der Benutzer sie in Spark registrieren und dann in Spark SQL-Abfragen verwenden.
Beispiele
Hive bietet zwei UDF-Schnittstellen: UDF und GenericUDF.
Das folgende Beispiel verwendet von GenericUDF abgeleitetes 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|
+--------------+
-- 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 verfügt über zwei UDAF-Schnittstellen: UDAF und GenericUDAFResolver.
Das folgende Beispiel verwendet von GenericUDAFResolver abgeleitetes 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|
+---+---------------+
Überprüfen Sie Ihre Berechtigung für ein Prüfungsrabattangebot und registrieren Sie sich für kostenlose Live-Sitzungen, um sich auf die Prüfung DP-700 vorzubereiten.