在 Spark Scala UDF 中定义返回值

Mar*_*ace 6 scala user-defined-functions apache-spark udf

想象一下下面的代码:

def myUdf(arg: Int) = udf((vector: MyData) => {
  // complex logic that returns a Double
})
Run Code Online (Sandbox Code Playgroud)

如何定义 myUdf 的返回类型,以便查看代码的人立即知道它返回 Double?

Rap*_*oth 6

我看到有两种方法可以做到这一点,要么先定义一个方法,然后将其提升到一个函数

def myMethod(vector:MyData) : Double = {
  // complex logic that returns a Double
}

val myUdf = udf(myMethod _)
Run Code Online (Sandbox Code Playgroud)

或者首先使用显式类型定义一个函数:

val myFunction: Function1[MyData,Double] = (vector:MyData) => {
  // complex logic that returns a Double
}

val myUdf = udf(myFunction)
Run Code Online (Sandbox Code Playgroud)

我通常对我的 UDF 使用第一种方法


Mar*_*ace 4

Spark函数定义了多个udf具有以下修饰符/类型的方法:static <RT,A1, ..., A10> UserDefinedFunction

您可以在方括号中指定输入/输出数据类型,如下所示:

def myUdf(arg: Int) = udf[Double, MyData]((vector: MyData) => {
  // complex logic that returns a Double
})
Run Code Online (Sandbox Code Playgroud)