-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