dongjoon-hyun commented on a change in pull request #32407:
URL: https://github.com/apache/spark/pull/32407#discussion_r627105752
##########
File path:
sql/catalyst/src/main/java/org/apache/spark/sql/connector/catalog/functions/ScalarFunction.java
##########
@@ -29,33 +29,62 @@
* <p>
* The JVM type of result values produced by this function must be the type
used by Spark's
* InternalRow API for the {@link DataType SQL data type} returned by {@link
#resultType()}.
+ * The mapping between {@link DataType} and the corresponding JVM type is
defined below.
* <p>
* <b>IMPORTANT</b>: the default implementation of {@link #produceResult}
throws
- * {@link UnsupportedOperationException}. Users can choose to override this
method, or implement
- * a "magic method" with name {@link #MAGIC_METHOD_NAME} which takes
individual parameters
- * instead of a {@link InternalRow}. The magic method will be loaded by Spark
through Java
- * reflection and will also provide better performance in general, due to
optimizations such as
- * codegen, removal of Java boxing, etc.
- *
- * For example, a scalar UDF for adding two integers can be defined as follow
with the magic
+ * {@link UnsupportedOperationException}. Users must choose to either override
this method, or
+ * implement a magic method with name {@link #MAGIC_METHOD_NAME}, which takes
individual parameters
+ * instead of a {@link InternalRow}. The magic method approach is generally
recommended because it
+ * provides better performance over the default {@link #produceResult}, due to
optimizations such
+ * as whole-stage codegen, elimination of Java boxing, etc.
+ * <p>
+ * In addition, for functions implemented in Java that are stateless, users
can optionally define
+ * the {@link #MAGIC_METHOD_NAME} as a static method, which further avoids
certain runtime costs
+ * such as nullness check on the method receiver, potential Java dynamic
dispatch, etc.
+ * <p>
+ * For example, a scalar UDF for adding two integers can be defined as follow
with the static magic
* method approach:
*
* <pre>
* public class IntegerAdd implements{@code ScalarFunction<Integer>} {
+ * public DataType[] inputTypes() {
+ * return new DataType[] { DataTypes.IntegerType, DataTypes.IntegerType
};
+ * }
* public int invoke(int left, int right) {
Review comment:
This is not a static method which is inconsistent with line 45, `the
static magic method approach`. I guess one of them should be changed for
consistency.
--
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:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]