Integrering med Hive UDF, UDAF och UDTF
Gäller för: Databricks Runtime
Spark SQL stöder integrering av Hive UDF:er, UDF:er och UDF:er. På samma sätt som Spark-UDF:er och UDAF:er fungerar Hive-UDF:er på en enda rad som indata och genererar en enskild rad som utdata, medan Hive UDAFs fungerar på flera rader och returnerar en enda aggregerad rad som ett resultat. Dessutom har Hive även stöd för UDF:er (användardefinierade tabellfunktioner) som fungerar på en rad som indata och returnerar flera rader som utdata. Om du vill använda Hive UDF:er/UDF:er/UDF:er bör användaren registrera dem i Spark och sedan använda dem i Spark SQL-frågor.
Exempel
Hive har två UDF-gränssnitt: UDF och GenericUDF.
Ett exempel nedan använder GenericUDFAbs som härletts från 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|
+--------------+
I ett exempel nedan används GenericUDTFExplode som härletts från 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 har två UDAF-gränssnitt: UDAF och GenericUDAFResolver.
Ett exempel nedan använder GenericUDAFSum som härletts från 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|
+---+---------------+