2017-05-31 90 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