想象一下下面的代碼:定義返回值
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
你有沒有想過接受一個答案? –