spark-instrumented-optimizer/docs/sql-ref-functions-udf-hive.md
Kazuaki Ishizaki 35fcc8d5c5 [MINOR][DOCS] Fix typo in documents
### What changes were proposed in this pull request?
Fixed typo in `docs` directory and in `project/MimaExcludes.scala`

### Why are the changes needed?
Better readability of documents

### Does this PR introduce _any_ user-facing change?
No

### How was this patch tested?
No test needed

Closes #28447 from kiszk/typo_20200504.

Authored-by: Kazuaki Ishizaki <ishizaki@jp.ibm.com>
Signed-off-by: HyukjinKwon <gurwls223@apache.org>
2020-05-04 16:53:50 +09:00

3.9 KiB

layout title displayTitle license
global Integration with Hive UDFs/UDAFs/UDTFs Integration with Hive UDFs/UDAFs/UDTFs Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Description

Spark SQL supports integration of Hive UDFs, UDAFs and UDTFs. Similar to Spark UDFs and UDAFs, Hive UDFs work on a single row as input and generate a single row as output, while Hive UDAFs operate on multiple rows and return a single aggregated row as a result. In addition, Hive also supports UDTFs (User Defined Tabular Functions) that act on one row as input and return multiple rows as output. To use Hive UDFs/UDAFs/UTFs, the user should register them in Spark, and then use them in Spark SQL queries.

Examples

Hive has two UDF interfaces: UDF and GenericUDF. An example below uses GenericUDFAbs derived from GenericUDF.

{% highlight sql %} -- 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| +--------------+ {% endhighlight %}

An example below uses GenericUDTFExplode derived from GenericUDTF.

{% highlight sql %} -- 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| +---+ {% endhighlight %}

Hive has two UDAF interfaces: UDAF and GenericUDAFResolver. An example below uses GenericUDAFSum derived from GenericUDAFResolver.

{% highlight sql %} -- 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| +---+---------------+ {% endhighlight %}