مشاركة عبر


التكامل مع Hive UDFs وUDAFs وUDTFs

ينطبق على: وضع علامة Databricks Runtime

يدعم Spark SQL تكامل Hive UDFs وUDAFs وUDTFs. على غرار Spark UDFs وUDAFs، تعمل Hive UDFs على صف واحد كإدخال وتنشئ صفا واحدا كإخراج، بينما تعمل Hive UDAFs على صفوف متعددة وتعيد صفا مجمعا واحدا كنتيجة لذلك. بالإضافة إلى ذلك، يدعم Hive أيضا UDTFs (الوظائف الجدولية المعرفة من قبل المستخدم) التي تعمل على صف واحد كإدخال وإرجاع صفوف متعددة كإخراج. لاستخدام Hive UDFs/UDAFs/UTFs، يجب على المستخدم تسجيلها في Spark، ثم استخدامها في استعلامات Spark SQL.

الأمثلة

يحتوي Hive على واجهتين UDF: UDF و GenericUDF. يستخدم مثال أدناه GenericUDFAbs المشتق من 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|
+--------------+

يستخدم مثال أدناه GenericUDTFExplode المشتق من 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 على واجهتي UDAF: UDAF و GenericUDAFResolver. يستخدم مثال أدناه GenericUDAFSum المشتق من 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|
+---+---------------+