-1

我有點迷失在如何做到這一點。我正在實現總和函數MADlib。這個函數數組任意數量並補充說:sum MADlib UDF Spark SQL

sum (array [ 1,2] , array [2,3 ] , array [4,5 ]) 
Return : [7,10] 

我要創建的下一條語句返回相同結果的函數,而不是如何實現這樣的事情:

def sum[T](args: WrappedArray[T]*)(implicit n: Numeric[T]) = { 
    var i : Int = 0; 
    for(arg <- args){ 
     // Code 
     i = i + 1; 
    } 
    } 

sqlContext.udf.register("sum", sum(_:WrappedArray[Int]*)) 
sqlContext.sql("SELECT sum(collect_list(a),collect_list(b),collect_list(c)) from df").show 
+0

這個問題解決了嗎? – slouc

回答

1
def sum[T](args: WrappedArray[T]*)(implicit n: Numeric[T]) = { 
    args.transpose.map(_.sum) 
} 

sum(Array(1, 2), Array(2, 3), Array(4, 5)) // ArrayBuffer(7, 10) 
+0

但是作爲Spark SQL函數中的一個記錄對幾個參數?因爲聲明失敗了'sqlContext.udf.register(「sum」,sum(_:WrappedArray [Int] *))' – nest

+0

我不明白,對不起。我以爲你只需要'代碼'部分來實現你描述的邏輯。我提供的函數接受任意數量的'WrappedArray [T]'參數,並按照您所描述的總結它們(注意它們需要長度相等)。 – slouc

+0

對不起,如果我沒有解釋清楚。它的功能服務於我,但是因爲我無法在SparkSQL中註冊來自sql – nest