Aracılığıyla paylaş


Hive UDF’leri, UDAF’leri ve UDTF’leriyle tümleştirme

Şunlar için geçerlidir:evet olarak işaretlenmiş Databricks Runtime

Spark SQL, Hive UDF'leri, UDAF'leri ve UDTF'leri tümleştirmeyi destekler. Spark UDF'leri ve UDAF'lere benzer şekilde, Hive UDF'leri tek bir satırda giriş olarak çalışır ve çıkış olarak tek bir satır oluştururken Hive UDAF'leri birden çok satırda çalışır ve sonuç olarak tek bir toplu satır döndürür. Buna ek olarak Hive, giriş olarak bir satırda işlem yapıp çıkış olarak birden çok satır döndüren UDF'leri (Kullanıcı Tanımlı Tablolu İşlevler) de destekler. Hive UDF'lerini/UDAF'leri/UTF'leri kullanmak için kullanıcının bunları Spark'a kaydetmesi ve ardından Spark SQL sorgularında kullanması gerekir.

Örnekler

Hive iki UDF arabirimine sahiptir: UDF ve GenericUDF. Aşağıda, GenericUDFAbs'i GenericUDF türetecek bir örnek yer almaktadır.

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

Aşağıdaki örnek, GenericUDTF'den türetilen GenericUDTFExplode'u kullanır.

-- 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 iki UDAF arabirimine sahiptir: UDAF ve GenericUDAFResolver. Aşağıdaki örnek, GenericUDAFResolver'den türetilen GenericUDAFSum kullanmaktadır.

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