想象一下下面的代码:定义返回值
def myUdf(arg: Int) = udf((vector: MyData) => {
// complex logic that returns a Double
})
我如何定义myUdf的返回类型,让人们看代码会立即知道它返回一个Double?
想象一下下面的代码:定义返回值
def myUdf(arg: Int) = udf((vector: MyData) => {
// complex logic that returns a Double
})
我如何定义myUdf的返回类型,让人们看代码会立即知道它返回一个Double?
星火functions定义多个udf
方法具有以下改性剂/类型:static <RT,A1, ..., A10> UserDefinedFunction
您可以在方括号中指定输入/输出数据类型,如下所示:
def myUdf(arg: Int) = udf[Double, MyData]((vector: MyData) => {
// complex logic that returns a Double
})
没有什么特别之处UDF与lambda函数,它们的行为就像斯卡拉lambda函数(见Specifying the lambda return type in Scala),所以你可以这样做:
def myUdf(arg: Int) = udf(((vector: MyData) => {
// complex logic that returns a Double
}): (MyData => Double))
或代替明确定义你的函数:
def myFuncWithArg(arg: Int) {
def myFunc(vector: MyData): Double = {
// complex logic that returns a Double. Use arg here
}
myFunc _
}
def myUdf(arg: Int) = udf(myFuncWithArg(arg))
如何在第二个示例中使用'arg'? – Gevorg
更新了包含arg的答案 –
我看到两种方法来做到这一点,先定义一个方法,然后将其提升到一个函数
def myMethod(vector:MyData) : Double = {
// complex logic that returns a Double
}
val myUdf = udf(myMethod _)
或显式类型先定义一个函数:
val myFunction: Function1[MyData,Double] = (vector:MyData) => {
// complex logic that returns a Double
}
val myUdf = udf(myFunction)
我通常使用的firt方法为我的UDF
你有没有想过接受一个答案? –