2017-05-31 62 views
1

想象一下下面的代码:定义返回值

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

我如何定义myUdf的返回类型,让人们看代码会立即知道它返回一个Double?

+0

你有没有想过接受一个答案? –

回答

0

星火functions定义多个udf方法具有以下改性剂/类型:static <RT,A1, ..., A10> UserDefinedFunction

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

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

没有什么特别之处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)) 
+0

如何在第二个示例中使用'arg'? – Gevorg

+0

更新了包含arg的答案 –

0

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

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