maropu commented on a change in pull request #28087: [SPARK-31319][SQL][DOCS] Document UDFs/UDAFs in SQL Reference URL: https://github.com/apache/spark/pull/28087#discussion_r402057017
########## File path: docs/sql-ref-functions-udf-scalar.md ########## @@ -1,22 +1,187 @@ --- layout: global -title: User defined Scalar Functions (UDF) -displayTitle: User defined Scalar Functions (UDF) +title: Scalar User Defined Functions (UDFs) +displayTitle: Scalar User Defined Functions (UDFs) license: | 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. --- -**This page is under construction** +### Description + +User-Defined Functions (UDFs) are user-programmable routines that act on one row. This documentation lists the classes that are required for creating and registering UDFs. It also contains examples that demonstrate how to define, register UDFs and invoke them in Spark SQL. + + +### org.apache.spark.sql.expressions.UserDefinedFunction + +A user-defined function. To create one, use the `udf` functions in `functions`. + +<dl> + <dt><code><em>asNonNullable(): UserDefinedFunction</em></code></dt> + <dd> + Updates UserDefinedFunction to non-nullable. + </dd> +</dl> + +<dl> + <dt><code><em>asNondeterministic(): UserDefinedFunction</em></code></dt> + <dd> + Updates UserDefinedFunction to nondeterministic. + </dd> +</dl> + +<dl> + <dt><code><em>deterministic: Boolean</em></code></dt> + <dd> + Returns true iff the UDF is deterministic, i.e. the UDF produces the same output given the same input. + </dd> +</dl> + +<dl> + <dt><code><em>nullable: Boolean</em></code></dt> + <dd> + Returns true when the UDF can return a nullable value. + </dd> +</dl> + +<dl> + <dt><code><em>withName(name: String): UserDefinedFunction</em></code></dt> + <dd> + Updates UserDefinedFunction with a given name. + </dd> +</dl> + +### org.apache.spark.sql.UDFRegistration + +Functions for registering user-defined functions. Use `SparkSession.udf` to access this: `spark.udf` + +<dl> + <dt><code><em>register(name: String, udf: UserDefinedFunction): UserDefinedFunction</em></code></dt> + <dd> + Registers a user-defined function (UDF). + </dd> +</dl> + +### Examples + +{% highlight sql %} + +// Define and register a zero argument non-deterministic UDF +// UDF is deterministic by default, i.e. produces the same result for the same input. +// Scala +import org.apache.spark.sql.functions.udf + +val foo = udf(() => Math.random()) +spark.udf.register("random", foo.asNondeterministic()) + +-- SQL +SELECT random(); + ++------------------+ +|UDF() | ++------------------+ +|0.9199799737037972| ++------------------+ + +// Define and register a one argument UDF +// Scala +import org.apache.spark.sql.functions.udf + +val plusOne = udf((x: Int) => x + 1) +spark.udf.register("plusOne", plusOne) + +-- SQL +SELECT plusOne(5); + ++------+ +|UDF(5)| ++------+ +| 6| ++------+ + +// Define a two arguments UDF and register it with Spark in one step Review comment: `Define a two arguments` -> `Define two arguments`? ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org