-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

私は理解できない、ごめんなさい。私はあなたが記述したロジックを達成するために '// code'の部分が必要だったと思いました。私が提供する関数は、任意の数の 'WrappedArray [T]'引数をとり、記述したとおりにそれらを合計します(それらの長さは同じでなければならないことに注意してください)。 – slouc

+0

私はよく説明していない場合は申し訳ありません。その関数は私に役立ちますが、SQLから呼び出すためにSparkSQLに登録することはできません。 – nest