Aracılığıyla paylaş


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

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

Spark SQL, Hive UDF'leri, UDAF'leri ve UDF'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ğıdaki örneklerden biri, 'den türetilen GenericUDFAbs'i GenericUDFkullanı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, 'den türetilen GenericUDAFSum'u GenericUDAFResolverkullanı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|
+---+---------------+