Integráció a Hive UDF-ekkel, UDAF-ekkel és UDTF-ekkel
A következőkre vonatkozik: Databricks Runtime
A Spark SQL támogatja a Hive UDF-ek, UDAF-ek és UDTF-ek integrációját. A Spark UDF-ekhez és az UDAF-ekhez hasonlóan a Hive UDF-ek bemenetként egyetlen sorban dolgoznak, és kimenetként egyetlen sort hoznak létre, míg a Hive UDAF-ek több sorban működnek, és ennek eredményeként egyetlen összesített sort ad vissza. Emellett a Hive támogatja az UDTF-eket (felhasználó által definiált táblázatos függvényeket), amelyek bemenetként egy sorban működnek, és több sort ad vissza kimenetként. A Hive UDFs/UDAFs/UTFs használatához a felhasználónak regisztrálnia kell őket a Sparkban, majd használnia kell őket a Spark SQL-lekérdezésekben.
Példák
A Hive két UDF-felülettel rendelkezik: UDF és GenericUDF.
Az alábbi példa a GenericUDFAbs függvényt használja, amely a következőből GenericUDF
származik: .
-- 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|
+--------------+
Az alábbi példa a GenericUDTF-ből származtatott GenericUDTFExplode parancsot használja.
-- 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|
+---+
A Hive két UDAF-felülettel rendelkezik: UDAF és GenericUDAFResolver.
Az alábbi példában a GenericUDAFSum származik 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|
+---+---------------+