[ https://issues.apache.org/jira/browse/FLINK-5571?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15860828#comment-15860828 ]
ASF GitHub Bot commented on FLINK-5571: --------------------------------------- Github user godfreyhe commented on a diff in the pull request: https://github.com/apache/flink/pull/3176#discussion_r100478286 --- Diff: flink-libraries/flink-table/src/main/scala/org/apache/flink/table/functions/UserDefinedFunction.scala --- @@ -24,4 +24,19 @@ package org.apache.flink.table.functions * User-defined functions must have a default constructor and must be instantiable during runtime. */ trait UserDefinedFunction { --- End diff -- The Scala wrapper class can be abstract class. MathTrait.scala ```Scala trait MathTrait { def sum(x: Int, y: Int) = x + y } ``` MathTraitWrapper.scala ```Scala abstract class MathTraitWrapper extends MathTrait { } ``` JavaMath.java ```Java public class JavaMath extends MathTraitWrapper { public static void main(String[] args) { new JavaMath(); } public JavaMath() { System.out.println(sum(2, 2)); } } ``` This code works as expected, printing the number 4 when it is run. > add open and close methods for UserDefinedFunction in TableAPI & SQL > -------------------------------------------------------------------- > > Key: FLINK-5571 > URL: https://issues.apache.org/jira/browse/FLINK-5571 > Project: Flink > Issue Type: New Feature > Components: Table API & SQL > Reporter: godfrey he > Assignee: godfrey he > > Currently, a User Defined Function (UDF) in table API & SQL works on zero, > one, or multiple values in custom evaluation method. Many UDFs need more > complex features, e.g. report metrics, get parameters from job configuration, > or get extra data from distribute cache file, etc. Adding open and close > methods in UserDefinedFunction class can solve this problem. The code cloud > look like: > {code} > trait UserDefinedFunction { > def open(context: UDFContext): Unit = {} > def close(): Unit = {} > } > {code} > UDFContext contains the information about metric reporters, job parameters, > distribute cache, etc. The code cloud look like: > {code} > class UDFContext(context: RuntimeContext) { > def getMetricGroup: MetricGroup = ??? > def getDistributedCacheFile(name: String): File = ??? > def getJobParameter(key: String, default: String): String = ??? > } > {code} -- This message was sent by Atlassian JIRA (v6.3.15#6346)